Problem z konwersją ze współczynnika na zmienną numeryczną w R [zamknięty]

11

Chciałbym przekonwertować zmienną czynnikową na zmienną numeryczną, ale as.numericnie daje oczekiwanego efektu.

Poniżej otrzymuję statystyki podsumowujące dla numerycznej wersji zmiennej na podstawie oryginalnej zmiennej. Środki ciągle liczą się o 1 ... być może (spekuluje) poziomy czynnika mają zarówno nazwy, jak i liczby, i spodziewam się, że wartość nowej zmiennej będzie pochodzić od nazwy, kiedy as.numericma ona być używana?

> 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
źródło
1
Usunąłem nowe tagi, które dodałeś; wydawały mi się albo zbyt ogólne i niedyskryminacyjne, albo w przypadku as. czynnik zbyt wąski (ponieważ jest to funkcja w podstawie R). Retag, jeśli uważasz, że coś zostało utracone.
JMS

Odpowiedzi:

28

To prawda: as.numeric(factor)zwraca liczbę, którą R przypisuje do poziomu tego współczynnika. Możesz spróbowaćas.numeric(as.character(factor))

Richard
źródło
4
Jak sugeruje ta odpowiedź, stackoverflow.com/a/3418192/476907 as.numeric(levels(f))[f] jest zalecany i nieco bardziej wydajny niżas.numeric(as.character(f))
discipulus
Dziękuję Ci! Ta odpowiedź bardzo mi pomogła :)
Yasha
13

To jest FAQ 7.10 w R Często zadawane pytania. Tak, współczynnik jest przechowywany jako liczby całkowite od 1 do liczby poziomów, a as.numeric podaje kody bazowe. FAQ podaje 2 sposoby konwersji na numeryczne.

Zwykle dzieje się tak, ponieważ podczas odczytywania danych było coś w danych, co spowodowało, że R potraktował je jako czynnik zamiast liczb (często zbłąkany znak nienumeryczny). Często lepiej jest naprawić surowe dane (konwersja przekształci element nieliczbowy w NA) lub użyj argumentu colClasses, jeśli używasz read.table lub podobnego.

Greg Snow
źródło
1
values.tmp <- sapply (ossibleValues, as.numeric); values.nonnumeric <- values.tmp [is.na (values.tmp)]
russellpierce