Ich habe einen R-Datenrahmen und ich versuche, eine Spalte von einer anderen zu subtrahieren. Ich extrahiere die Spalten mit dem Operator $
, aber die Klasse der Spalten ist 'Faktor' und R führt keine arithmetischen Operationen an Faktoren durch. Gibt es dafür spezielle Funktionen?
Wenn Sie wirklich wollen, dass die Ebenen des Faktors verwendet werden, tun Sie entweder etwas sehr falsches oder zu cleveres für sich selbst.
Wenn Sie einen Faktor haben, der Zahlen enthält, die in den Ebenen des Faktors gespeichert sind, dann möchten Sie ihn zunächst mit as.numeric(as.character(...))
:
Sie können den Unterschied zwischen dem Zugriff auf die Faktorindizes und dem Zuweisen des Inhalts des Faktors sehen:
%Vor%Timings vs. ein alternativer Ansatz, der nur die Konvertierung auf den Ebenen zeigt, ist schneller, wenn die Ebenen nicht für jedes Element eindeutig sind:
%Vor% Wenn length(levels(dat$f)) < length(dat$f)
verwendet wird, verwenden Sie daher as.numeric(levels(dat$f))[dat$f]
für eine erhebliche Geschwindigkeitsverstärkung.
Wenn length(levels(dat$f))
ungefähr gleich length(dat$f)
ist, gibt es keine Geschwindigkeitsverstärkung:
Sie sollten zuerst überprüfen, wie Sie die Daten erfassen. Wenn dies wirklich numerische Spalten sind, sollte R dies erkennen (Excel versagt manchmal). Wie auch immer, es könnte zu einem Faktor gezwungen werden, weil es andere unerwünschte Elemente in den Spalten gibt. Die Antworten, die Sie bisher erhalten haben, haben nicht erwähnt, dass as.numeric () nur die Level-Nummern zurückgibt. Dies bedeutet, dass Sie die Operation nicht mit den tatsächlichen Zahlen durchführen, die in Faktoren umgewandelt wurden, sondern mit den Ebenenzahlen, die mit jedem Faktor verknüpft sind.
Sie müssen die Faktoren in numerische Arrays konvertieren.
%Vor%