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?
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.)
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
:
... 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:
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:
Was ergibt:
%Vor% Dann mit Ihren Originaldaten im Objekt df2
, definiert mit
verwende merge()
Sie können das speichern und die Spalten neu anordnen, wenn Sie das brauchen:
%Vor%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%Tags und Links r