R Academy · Урок

Преобразование логических и строковых значений

Преобразуйте логические, строковые и числовые значения с помощью as.logical() и as.character().

Урок 3 из 413 шагов

«Преобразование логических и строковых значений» — бесплатный урок R Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения R Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс R Academy содержит 4 уроков всего.

Преобразование между типами

В R предусмотрены функции as.*() для преобразования между всеми базовыми типами. В этом уроке рассматриваются преобразования между типами logical, character и numeric — наиболее распространённые преобразования туда и обратно при очистке данных.

# Quick overview of as.*() functions
cat('as.logical(1):    ', as.logical(1), '
')     # TRUE
cat('as.numeric(TRUE): ', as.numeric(TRUE), '
')  # 1
cat('as.character(3.14):', as.character(3.14), '
') # "3.14"
cat('as.logical("TRUE"):', as.logical('TRUE'), '
') # TRUE

Преобразование numeric в logical

При преобразовании числа в logical: 0 превращается в FALSE, а любое ненулевое число — в TRUE. Это правило действует и для integer, и для double.

cat('as.logical(0):    ', as.logical(0), '
')     # FALSE
cat('as.logical(1):    ', as.logical(1), '
')     # TRUE
cat('as.logical(-5):   ', as.logical(-5), '
')    # TRUE (non-zero)
cat('as.logical(0.001):', as.logical(0.001), '
') # TRUE (non-zero)
cat('as.logical(0L):   ', as.logical(0L), '
')    # FALSE
cat('as.logical(3L):   ', as.logical(3L), '
')    # TRUE

Преобразование logical в numeric

TRUE преобразуется в 1, а FALSE — в 0. Это преобразование лежит в основе многих идиом R: например, sum() можно использовать для подсчёта значений TRUE, а mean() — для вычисления долей.

cat('as.numeric(TRUE):  ', as.numeric(TRUE), '
')   # 1
cat('as.numeric(FALSE): ', as.numeric(FALSE), '
')  # 0
cat('as.integer(TRUE):  ', as.integer(TRUE), '
')   # 1L

# Practical use: count TRUEs by summing
passed <- c(TRUE, FALSE, TRUE, TRUE, FALSE, TRUE)
cat('Passed count:', sum(as.numeric(passed)), '
')  # 4
cat('Pass rate:   ', mean(passed) * 100, '%
')      # 66.67%

as.logical() для строк

as.logical('TRUE') и as.logical('FALSE') преобразуют строковые представления. R также принимает 'T' и 'F' как сокращения. Любое другое значение (в том числе строчное 'true') возвращает NA.

cat('as.logical("TRUE"):  ', as.logical('TRUE'), '
')   # TRUE
cat('as.logical("FALSE"): ', as.logical('FALSE'), '
')  # FALSE
cat('as.logical("T"):     ', as.logical('T'), '
')      # TRUE
cat('as.logical("F"):     ', as.logical('F'), '
')      # FALSE
cat('as.logical("yes"):   ', as.logical('yes'), '
')    # NA (not recognised)
cat('as.logical("true"):  ', as.logical('true'), '
')   # NA (case-sensitive!)

Преобразование numeric в character

as.character(x) преобразует число в его строковое представление. Это полезно для создания подписей и идентификаторов, а также когда требуется вставить числа в строки.

num_val <- 3.14159
char_val <- as.character(num_val)
cat('as.character(3.14159):', char_val, '
')  # '3.14159'
cat('class:', class(char_val), '
')           # character

# Building labels
ids <- 1:5
labels <- paste0('Item_', as.character(ids))
cat('Labels:', labels, '
')

Преобразование character в numeric

as.numeric('3.14') разбирает строку и преобразует её в double. Если строку нельзя интерпретировать как число, R возвращает NA с предупреждением. В рабочем коде всегда проверяйте входные данные перед преобразованием.

cat('as.numeric("3.14"):  ', as.numeric('3.14'), '
')   # 3.14
cat('as.numeric("100"):   ', as.numeric('100'), '
')    # 100
cat('as.numeric("-5.5"):  ', as.numeric('-5.5'), '
')   # -5.5
cat('as.numeric("abc"):   ', as.numeric('abc'), '
')    # NA with warning
cat('as.numeric("1e3"):   ', as.numeric('1e3'), '
')    # 1000 (sci notation OK)

Преобразование logical в character

as.character(TRUE) создаёт строку 'TRUE'. Это полезно, когда логические значения необходимо включить в текстовый вывод, экспортируемые файлы или объединённые строки.

flag_t <- TRUE
flag_f <- FALSE

cat('as.character(TRUE): ', as.character(flag_t), '
')  # 'TRUE'
cat('as.character(FALSE):', as.character(flag_f), '
')  # 'FALSE'
cat('class:', class(as.character(flag_t)), '
')         # character

# In paste()
message <- paste('System status:', as.character(flag_t))
cat(message, '
')

Обратимое преобразование

Большинство преобразований обратимы, однако возможна потеря данных: при преобразовании numeric -> character -> numeric точность может снизиться в зависимости от того, как число отформатировано в виде строки.

original <- 3.141592653589793
char_version <- as.character(original)
back_to_num <- as.numeric(char_version)

cat('Original:  ', original, '
')
cat('As string: ', char_version, '
')
cat('Back:      ', back_to_num, '
')
cat('Identical?:', identical(original, back_to_num), '
')
cat('Equal?:    ', original == back_to_num, '
')

Преобразование векторов смешанного происхождения

При применении as.numeric() к вектору character каждый элемент преобразуется независимо. Элементы, которые невозможно разобрать, превращаются в NA. Это стандартный способ очистки данных, похожих на числовые, при чтении из файлов CSV.

# Simulated data from CSV (all read as character)
raw_data <- c('42', '37.5', 'N/A', '55', '', '28.0')
cat('Raw character data:', raw_data, '
')

numeric_data <- suppressWarnings(as.numeric(raw_data))
cat('Converted:         ', numeric_data, '
')  # 42 37.5 NA 55 NA 28
cat('NA count:          ', sum(is.na(numeric_data)), '
')

Преобразование logical в ifelse()

Сочетание as.numeric() с ifelse() или прямым умножением на логический вектор — распространённый приём для условного подсчёта баллов или создания признаков при анализе данных.

# Score: 1 for correct, 0 for incorrect
quiz_answers <- c('A', 'C', 'B', 'D', 'B')
correct      <- c('A', 'B', 'B', 'D', 'C')

is_correct <- quiz_answers == correct
cat('Correct:  ', is_correct, '
')
cat('As 0/1:   ', as.numeric(is_correct), '
')
cat('Score:    ', sum(is_correct), '/', length(is_correct), '
')

Краткий обзор преобразований

Краткий обзор основных преобразований logical и character:

  • as.logical(0) → FALSE; любое ненулевое значение → TRUE
  • as.logical('TRUE'/'T') → TRUE; регистр учитывается; остальные значения → NA
  • as.numeric(TRUE) → 1; as.numeric(FALSE) → 0
  • as.character(x) → строковое представление x
  • as.numeric('3.14') → 3.14; нечисловые строки → NA с предупреждением
# All conversions in one snippet
cat('logical->num:  ', as.numeric(c(TRUE, FALSE)), '
')
cat('num->logical:  ', as.logical(c(0, 1, -1, 0.5)), '
')
cat('char->num:     ', suppressWarnings(as.numeric(c('5', 'abc', '3.1'))), '
')
cat('char->logical: ', as.logical(c('TRUE', 'FALSE', 'yes')), '
')
cat('logical->char: ', as.character(c(TRUE, FALSE)), '
')

Быстрая проверка

Во что вычисляется выражение as.numeric(TRUE) + as.numeric(FALSE) в R?

Итоги: преобразование logical и character

Отлично! Основные выводы этого урока:

  • as.logical(0) → FALSE; ненулевое значение → TRUE; 'TRUE'/'T' → TRUE
  • as.numeric(TRUE) → 1; as.numeric(FALSE) → 0
  • as.character(x) преобразует любое значение в строковое представление
  • as.numeric('3.14') разбирает числовую строку; недопустимые строки → NA
  • as.logical('true') — это NA: сравнение чувствительно к регистру, а 'TRUE' работает
  • Преобразования в основном обратимы; используйте suppressWarnings() при преобразовании столбцов, в которых ожидается появление значений NA
# Practical: parse a messy survey score column
raw_scores <- c('8', '7', 'N/A', '9', 'skip', '6')
numeric_scores <- suppressWarnings(as.numeric(raw_scores))
cat('Parsed:', numeric_scores, '
')
cat('Valid responses:', sum(!is.na(numeric_scores)), '
')
cat('Average score:  ', round(mean(numeric_scores, na.rm = TRUE), 2), '
')
Можно начать бесплатно

Изучай R с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
43
Уроки
159

Часто задаваемые вопросы

Урок «Преобразование логических и строковых значений» бесплатный?

Да — полный текст урока «Преобразование логических и строковых значений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс R Academy, подпишись на CoddyKit PRO. Курс R Academy содержит 4 уроков всего.

Чему я научусь в уроке «Преобразование логических и строковых значений»?

Преобразуйте логические, строковые и числовые значения с помощью as.logical() и as.character(). Ты практикуешь R Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать R Academy?

Предыдущий опыт не требуется. R Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Преобразование логических и строковых значений»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке R Academy?

Да. Каждый урок R Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Обзор системы типов R
  2. Преобразование числовых типов
  3. Преобразование логических и строковых значений
  4. Подводные камни и лучшие практики приведения типов
← Назад к R Academy