Problema ao converter de fator para variável numérica em R [fechado]

11

Gostaria de converter uma variável de fator em uma numérica, mas as.numericnão tem o efeito esperado.

Abaixo, obtenho estatísticas resumidas da versão numérica da variável com base na variável original. Os meios continuam contando em 1 ... talvez (ele especula) os níveis do fator tenham nomes e números, e eu estou esperando que o valor da nova variável venha do nome quando as.numericé projetado para usar o número?

> 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
--------------------------------------------------------- 
Michael Bishop
fonte
11
Eu removi as novas tags que você adicionou; eles me pareciam muito gerais e não discriminatórios, ou no caso de um fator muito estreito (já que é uma função na base R). Marque novamente se você acha que algo foi perdido.
JMS

Respostas:

28

Isso está correto: as.numeric(factor)retorna o número que R atribui ao nível desse fator. Você poderia tentaras.numeric(as.character(factor))

Richard
fonte
4
Como esta resposta sugere, stackoverflow.com/a/3418192/476907 as.numeric(levels(f))[f] é recomendado e um pouco mais eficiente queas.numeric(as.character(f))
discipulus
Obrigado! Esta resposta me ajudou muito :)
Yasha
13

Esta é a FAQ 7.10 nas Perguntas mais frequentes sobre R. Sim, um fator é armazenado como números inteiros de 1 ao número de níveis e as.numeric fornece os códigos subjacentes. O FAQ fornece duas maneiras de converter para numérico.

No entanto, geralmente isso ocorre porque, quando você lê os dados, havia algo nos seus dados que fazia com que o R os tratasse como um fator em vez de números (geralmente um caractere não numérico perdido). Geralmente, é melhor corrigir os dados brutos (a conversão converterá a parte não numérica em NA) ou usar o argumento colClasses se estiver usando read.table ou similar.

Greg Snow
fonte
11
values.tmp <- sapply (PossibleValues, as.numeric); values.nonnumeric <- values.tmp [is.na (values.tmp)]
russellpierce