Arithmetische Operationen an R-Faktoren

7

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?

    
Michael 08.08.2011, 08:47
quelle

4 Antworten

20

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(...)) :

auf numerisch erzwingen %Vor%

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:

%Vor%     
Ari B. Friedman 08.08.2011, 10:26
quelle
3

Sie können dazu eigene Operatoren definieren, siehe ? Arith . Ohne Gruppengenerika können Sie eigene Binäroperatoren% operator% definieren:

%Vor%     
cbeleites 08.08.2011 09:15
quelle
3

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.

    
Brandon Bertelsen 08.08.2011 10:27
quelle
1

Sie müssen die Faktoren in numerische Arrays konvertieren.

%Vor%     
Janne Peltola 08.08.2011 09:16
quelle

Tags und Links