Problem beim Konvertieren von Faktor in numerische Variable in R [geschlossen]

11

Ich möchte eine Faktorvariable in eine numerische konvertieren, habe as.numericaber nicht den erwarteten Effekt.

Unten erhalte ich zusammenfassende Statistiken für die numerische Version der Variablen basierend auf der ursprünglichen Variablen. Die Mittel zählen weiter um 1 hoch ... vielleicht (er spekuliert) haben die Ebenen des Faktors sowohl Namen als auch Zahlen, und ich erwarte, dass der Wert der neuen Variablen aus dem Namen stammt, wenn as.numericdie Zahl verwendet werden soll?

> 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
quelle
1
Ich habe die neuen Tags entfernt, die Sie hinzugefügt haben. Sie schienen mir entweder zu allgemein und nicht diskriminierend oder im Fall eines zu engen Faktors (da es sich um eine Funktion in der R-Basis handelt). Bitte wiederholen Sie den Vorgang, wenn Sie der Meinung sind, dass etwas verloren gegangen ist.
JMS

Antworten:

28

Das ist richtig: as.numeric(factor)Gibt die Zahl zurück, die R der Ebene dieses Faktors zuweist. Du könntest es versuchenas.numeric(as.character(factor))

Richard
quelle
4
Wie aus dieser Antwort hervorgeht, wird stackoverflow.com/a/3418192/476907 as.numeric(levels(f))[f] empfohlen und ist etwas effizienter alsas.numeric(as.character(f))
discipulus
Vielen Dank! Diese Antwort hat mir sehr geholfen :)
Yasha
13

Dies ist FAQ 7.10 in den R Häufig gestellten Fragen. Ja, ein Faktor wird als Ganzzahl von 1 bis zur Anzahl der Ebenen gespeichert, und as.numeric gibt die zugrunde liegenden Codes an. Die FAQ bietet zwei Möglichkeiten zur Konvertierung in numerische Zahlen.

Dies liegt jedoch normalerweise daran, dass beim Einlesen der Daten etwas an Ihren Daten dazu führte, dass R sie als Faktor anstelle von Zahlen behandelte (häufig ein nicht numerisches Streuzeichen). Oft ist es besser, die Rohdaten zu korrigieren (die Konvertierung konvertiert das nicht numerische Stück in NA) oder das Argument colClasses zu verwenden, wenn read.table oder ähnliches verwendet wird.

Greg Snow
quelle
1
values.tmp <- sapply (mögliche Werte, as.numeric); values.nonnumeric <- values.tmp [is.na (values.tmp)]
russellpierce