Проблема преобразования из фактора в числовую переменную в R [закрыто]

11

Я хотел бы преобразовать факторную переменную в числовую, но as.numericне имеет ожидаемого эффекта.

Ниже я получаю сводную статистику для числовой версии переменной на основе исходной переменной. Средство продолжает считать до 1 ... возможно (он размышляет), что уровни фактора имеют как имена, так и числа, и я ожидаю, что значение новой переменной будет исходить от имени, когда as.numericоно предназначено для использования числа?

> describe.by(as.numeric(df$sch), df$sch)

group: 
  var    n mean sd median trimmed mad min max range skew kurtosis se
1   1 5389    1  0      1       1   0   1   1     0  NaN      NaN  0
--------------------------------------------------------- 
group: 001
  var  n mean sd median trimmed mad min max range skew kurtosis se
1   1 19    2  0      2       2   0   2   2     0  NaN      NaN  0
--------------------------------------------------------- 
group: 002
  var  n mean sd median trimmed mad min max range skew kurtosis se
1   1 54    3  0      3       3   0   3   3     0  NaN      NaN  0
--------------------------------------------------------- 
Майкл Бишоп
источник
1
Я удалил новые теги, которые вы добавили; они казались мне либо слишком общими и не дискриминационными, либо в случае as.factor слишком узкими (так как это функция в R base). Пожалуйста, поменяйте, если вы думаете, что что-то было потеряно.
JMS

Ответы:

28

Это правильно: as.numeric(factor)возвращает число, которое R присваивает уровню этого фактора. Вы могли бы попробоватьas.numeric(as.character(factor))

Ричард
источник
4
Поскольку этот ответ предполагает, что stackoverflow.com/a/3418192/476907 as.numeric(levels(f))[f] рекомендуется и немного более эффективен, чемas.numeric(as.character(f))
ученик
Спасибо! Этот ответ мне очень помог :)
Яша
13

Это часто задаваемые вопросы 7.10 в R Часто задаваемые вопросы. Да, коэффициент хранится в виде целых чисел от 1 до количества уровней, а as.numeric дает базовые коды. FAQ предлагает 2 способа преобразования в числовые.

Однако обычно это происходит потому, что когда вы читали данные, в ваших данных было что-то такое, что заставляло R рассматривать их как фактор вместо чисел (часто случайный нечисловой символ). Часто лучше исправить необработанные данные (преобразование преобразует нечисловую часть в NA) или использовать аргумент colClasses, если используется read.table или аналогичный.

Грег Сноу
источник
1
values.tmp <- sapply (возможныйValues, as.numeric); values.nonnumeric <- values.tmp [is.na (values.tmp)]
russellpierce