2017-04-17 8 views
0

Ich habe Beispiele zum Sortieren einer Datentabelle nach einer ihrer Spalten gesehen, aber wie sortiere ich eine Datentabelle nach der Spalte einer anderen Datentabelle? Zum Beispiel, wenn ich zwei Datentabellen:R: Reihenfolge der Datentabelle nach Spalte einer anderen Datentabelle festlegen?

x <- data.table(ID=1:3,A=letters[3:1]) 
y <- data.table(ID=1:3,B=letters[1:3]) 

I x sortieren möchten basierend auf der Reihenfolge der y$B:

setorder(x,y$B) 
Error in setorderv(x, cols, order, na.last) : 
    some columns are not in the data.table: $,y,B 

Wie verweisen ich eine Spalte in y wenn x Sortierung?

Antwort

4

Fügen Sie einfach B zur Tabelle:

x[ , B := y$B] 
setorder(x, B) 
+0

ich es eine einfache Lösung zu sein, wusste hatte! Vielen Dank! Ich bin ein Neuling mit Datentabelle. – prefectionist

+0

Was ist, wenn ich nicht "y $ B" sortieren möchte? Ich möchte 'x' in der gleichen Reihenfolge wie 'y $ B' sortieren. Also, in dem Beispiel möchte ich 'x', so dass die Buchstaben in' x $ A' in der gleichen Reihenfolge wie 'y $ B' sind. Ich könnte dies mit 'match' in einem Datenrahmen tun. – prefectionist

+0

@prefectionist Was auch immer du mit 'match' denkst, sollte auch hier funktionieren, vielleicht' x_new <- x [match (A, y $ B)] ', aber du musst das Ergebnis einer neuen Tabelle zuweisen (genau wie bei einem data.frame). Einer der Verkaufsargumente von data.table ist die Fähigkeit, 'x' an Stelle zu ändern, ohne eine neue Tabelle zu erstellen, also ist dies nicht idiomatisch/eine gute Idee ... – Frank

-1
merge(y, x, by.x = "B", by.y = "A") 
+0

Um die Downvoters: vorsichtig erklären? Die Frage von OP kann tatsächlich mit Join statt Sortieren gelöst werden. Es ist einfach und leicht zu verstehen als die ursprüngliche Beschreibung. Nach dem Beitritt können Sie die gewünschten Spalten auswählen. – dracodoc

Verwandte Themen