2016-04-04 10 views
0

Grundsätzlich hatte ich eine erste data.frame, wo ich Teilnehmer Namen als row.names verwendet. Aus verschiedenen Gründen musste ich dann die Daten im langen Format stapeln und dann basierend auf einer Faktorvariablen nur einen Teil dieser Daten auswählen. Und dann aggregierte ich das so, dass ich die breiten Daten wieder mit Teilnehmern als row.names habe. Die Reihenfolge ist jedoch nicht die gleiche. Wenn ich also die ursprünglichen Wide-Daten mit den neuen Daten verbinden wollte, würde das meine Daten durcheinander bringen, da die Reihenfolge von row.names anders ist. Ich habe versucht, sort(), order(), transform() und lese mehrere Fragen, aber ich konnte keinen Weg finden, es zu tun.Wie wird ein data.frame basierend auf row.names in einem anderen Datenrahmen bestellt?

DF1

  V1   V2   V3 
AAA  24   22   37 
BBB  21   22   33 
CCC  30   32   38 
DDD  21   23   35 

der andere Datenrahmen hat die gleiche dim(), aber unterschiedliche Reihenfolge der row.names. DF2 row.names

BBB 
CCC 
AAA 
DDD 

würde Ich mag DF1 sortieren basierend von rownames (DF2), so daß die Variablen mit dem rownames bleiben, so kann ich dann cbind (D1, D2), und weil die roownames sind gleich, die gleiche Variable würde zu demselben Teilnehmer gehören. Ich könnte es überkompliziert haben, sorry :)

Grundsätzlich möchte ich den gesamten data.frame (DF1) basierend auf Rownames in DF2 neu anordnen.

Ich weiß, es ist eine lahme Frage, aber ich konnte keine funktionierende Antwort finden.

Antwort

4

Hier ist eine Option, zur Veranschaulichung der eingebauten in mtcars Datenrahmen mit:

# Create new sorted data frame. This is analogous to the second data frame 
# by which you want to sort the first one. 
mtcars.sorted = mtcars[order(rownames(mtcars)),] 

# Sort original data frame by the order of the new data frame 
mtcars[match(rownames(mtcars.sorted), rownames(mtcars)),] 

in Ihrem Fall also, würde der Code sein:

DF1[match(rownames(DF2), rownames(DF1)), ] 
+0

Das funktioniert perfekt! Danke vielmals. Ich weiß, dass es Grundlagen sind, aber ich konnte diesen Befehl nicht finden. –

3

Sie können match

> df <- data.frame(a=c("AAA","BBB","CCC"),b=1:3,c=6:8,d=9:11) 
> df 
    a b c d 
1 AAA 1 6 9 
2 BBB 2 7 10 
3 CCC 3 8 11 

> df1 <- data.frame(a=c("CCC","AAA","BBB")) 
> df1 
    a 
1 CCC 
2 AAA 
3 BBB 

> Final_df <- df[match(df1$a,df$a),] ## Here it is 
> Final_df 
    a b c d 
3 CCC 3 8 11 
1 AAA 1 6 9 
2 BBB 2 7 10 
Verwandte Themen