Füllen Sie eine neue Spalte in einem Datenframe mit einem Lookup aus einer Doppelmatrix

8

Ich habe einen Datenrahmen df:

%Vor%

Und eine Doppelmatrix m mit benannten Zeilen / Spalten

%Vor%

Ich möchte eine neue Spalte zu DF hinzufügen, so dass ich erhalten:

%Vor%

Ich habe versucht, dies mit dem folgenden Code zu tun, aber es scheint nicht zu funktionieren:

%Vor%

Ich habe auch apply () versucht; und ähnlich, aber ohne Glück. Kann mir jemand den richtigen Ansatz dazu sagen, ohne eine Schleife zu benutzen?

    
Ina 21.03.2012, 20:53
quelle

6 Antworten

5

Ich denke, ich könnte hier den Wettbewerb mit der kürzesten Antwort gewinnen, solange es sich um Zeichenvektoren handelt, und nicht um Faktoren, die eher erwartet werden, wenn Sie nicht ausdrücklich versuchen, dies zu vermeiden. Es fügt wirklich nur cbind hinzu, um die zwei df- "Zeichen" -Vektoren in eine zweispaltige Matrix zu konvertieren, die von der [.matrix -Funktion erwartet wird, mit der Sie sehr erfolgreich waren. (Und es scheint auch einigermaßen ausdrucksvoll.)

%Vor%     
42- 21.03.2012, 22:11
quelle
7

Eine ziemlich einfache (und schnelle!) Alternative ist die Verwendung einer Matrix zum Indexieren in Ihre Matrix:

%Vor%

Die Funktion match wird verwendet, um den entsprechenden numerischen Index für eine bestimmte Zeichenfolge zu finden.

Beachten Sie, dass Sie in der neueren Version von R (2.13 und neuer, glaube ich) Zeichenfolgen in der Indexmatrix verwenden können. Leider sind die Spalten color und shape normalerweise factors und cbind mag das nicht (es verwendet die Ganzzahlcodes), also müssen Sie sie mit as.character :

erzwingen %Vor%

... Ich vermute, dass die Verwendung von match jedoch effizienter ist.

BEARBEITEN Ich habe gemessen und es scheint ungefähr 20% schneller zu sein, match zu verwenden:

%Vor%     
Tommy 21.03.2012 21:12
quelle
2

Eine weitere Antwort Verwenden Sie die Pakete reshape2 und plyr (optional nur für Join-Pakete).

%Vor%

Hoffen Sie diese Hilfe

    
dickoa 21.03.2012 21:21
quelle
1

merge() ist dein Freund hier. Um es zu verwenden, benötigen wir einen passenden Datenrahmen, um mit der gestapelten Version Ihrer ID-Matrix zu verschmelzen. Ich erstelle das als newdf mit dem folgenden Code:

%Vor%

Was ergibt:

%Vor%

Dann mit Ihren Originaldaten im Objekt df2 , definiert mit

%Vor%

verwende merge()

%Vor%

Sie können das speichern und die Spalten neu anordnen, wenn Sie das brauchen:

%Vor%     
Gavin Simpson 21.03.2012 21:08
quelle
1

Sie könnten auch die Matrix m in einen Vektor konvertieren und dann die ID an die Farb- und Formwerte anpassen:

%Vor%

Der nächste Schritt stimmt die Farbe in df mit dem entsprechenden Dimnamen in der m-Matrix ab und fügt dann eine Ganzzahl hinzu, die der Form entspricht. Das Ergebnis im Index des Vektors m mit der entsprechenden ID.

%Vor%     
BenBarnes 21.03.2012 21:19
quelle
0
%Vor%     
Tyler Rinker 21.03.2012 21:31
quelle

Tags und Links