В статистике данные очень часто группируют в соответствии с тем или иным признаком, например, полом, социальным положением, стадией болезни, местом отбора проб и т.п. В R существует специальный класс векторов - факторы (factors), которые предназначены для хранения кодов соответствующих уровней номинальных признаков. Часто уровни факторов кодируют в виде чисел. В таких случаях очень важно "проинструктировать" программу так, чтобы она "распознавала" уровни номинальной переменной от чисел как таковых.

Предположим, в эксперименте по испытанию эффективности нового медицинского препарата было задействовано 10 пациентов-добровольцев, из которых шесть пациентов принимали новый препарат, а четверо остальных - плацебо (например, таблетку активированного угля). Для обозначения членов этих двух групп мы можем использовать коды 1 (препарат) и 0 (плацебо). Соответственно, информацию о всех десяти участниках эксперимента мы могли бы сохранить в виде следующего вектора:

treatment <- c(1, 1, 1, 1, 1, 1, 0, 0, 0, 0)
treatment
[1] 1 1 1 1 1 1 0 0 0 0

При таком подходе, однако, программа будет "рассматривать" вектор treatment в качестве числового (проверьте при помощи команды class(treatment)). Это будет ошибкой с нашей стороны, поскольку ноль и единица обозначают лишь два уровня номинальной переменной. С таким же успехом мы могли бы использовать, например, 10 для обозначения контрольной группы пациентов (т.е. пациентов принимавших плацебо) и 110 для обозначения пациентов, принимавших испытываемый препарат. Для преобразования числового (или текстового) вектора в фактор в R существует одноименная функция factor():

treatment <- factor(treatment, levels = c(0, 1))
treatment
[1] 1 1 1 1 1 1 0 0 0 0
Levels: 0 1

Обратите внимание на то, что теперь при выводе содержимого объекта treatment программа подсказывает нам, что этот объект является фактором с двумя уровнями (Levels: 0 1). Допольнительно убедиться в этом можно при помощи все той же команды class(treatment):

class(treatment))
[1] "factor"

Более надежным подходом, позволяющим не запутаться при выполнении анализа, является кодировка уровней факторов при помощи текcтовых значений, а не чисел. Например, в нашем примере можно присвоить значение yes пациентам, принимавшим препарат, и  значение no пациентам из контрольной группы. Мы можем перекодировать уровни уже имеющегося фактора treatment при помощи функции levels():

levels(treatment) <- c("no", "yes")
treatment
[1] yes yes yes yes yes yes no  no  no  no 
Levels: no yes

Заметьте, что при выводе содержимого вектора treatment коды пациентов не заключены в двойные кавычки, как это обычно бывает в случае с текстовыми значениями. Это является одним из внешних признаков того, что мы имеем дело именно с фактором, а не с текстовым вектором, содержащим шесть значений "yes" и четыре значения "no".

--
Создано при помощи Pretty R на сайте inside-R.org

3 Комментарии

Unknown написал(а)…
Подскажите, если у меня таблица данных и мне нужно сделать определённую колонку фактором.
Как это сделать?
Unknown написал(а)…
table$column = factor(table$column)
Rik Obli написал(а)…
Подскажите, как мне фактор перевести в числовое значение
Новые Старые