Кажется, есть разница между уровнями и метками фактора в R. До сих пор я всегда думал, что уровни были `` настоящим '' именем уровней факторов, а метки были именами, используемыми для вывода (например, таблиц и графиков) . Очевидно, что это не так, как показывает следующий пример:
df <- data.frame(v=c(1,2,3),f=c('a','b','c'))
str(df)
'data.frame': 3 obs. of 2 variables:
$ v: num 1 2 3
$ f: Factor w/ 3 levels "a","b","c": 1 2 3
df$f <- factor(df$f, levels=c('a','b','c'),
labels=c('Treatment A: XYZ','Treatment B: YZX','Treatment C: ZYX'))
levels(df$f)
[1] "Treatment A: XYZ" "Treatment B: YZX" "Treatment C: ZYX"
Я думал, что уровни ('a', 'b', 'c') каким-то образом могут быть доступны при написании скриптов, но это не работает:
> df$f=='a'
[1] FALSE FALSE FALSE
Но это действительно так:
> df$f=='Treatment A: XYZ'
[1] TRUE FALSE FALSE
Итак, мой вопрос состоит из двух частей:
В чем разница между уровнями и ярлыками?
Можно ли иметь разные имена для уровней факторов для написания сценариев и вывода?
Предпосылки: Для более длинных сценариев создание сценариев с короткими уровнями факторов кажется намного проще. Однако для отчетов и графиков эти короткие уровни факторов могут не подходить, и их следует заменить более точными названиями.
levels
аргумент, вы даете значения во входных данных, которые должны быть сопоставлены сlabels
аргументом. R сохраняет метки (как атрибутlevels
, и здесь возникает путаница) и хранит целочисленные коды внутри. Эти целочисленные коды не имеют ничего общего с исходными значениями, какого бы типа они ни были. Я думаю, вы меня неправильно поняли.Я написал пакет lfactors, который позволяет ссылаться либо на уровни, либо на метки.
Обратите внимание, что lfactor требует, чтобы уровни были числовыми, чтобы их нельзя было спутать с метками.
источник