我想合并兩個數據框,以保持其中一個的原始行順序(df.2在下面的示例中)。以下是一些示例數據(class列中的所有值都在兩個數據幀中定義):df.1 <- data.frame(class = c(1, 2, 3), prob = c(0.5, 0.7, 0.3))df.2 <- data.frame(object = c('A', 'B', 'D', 'F', 'C'), class = c(2, 1, 2, 3, 1))如果我做:merge(df.2, df.1)輸出為: class object prob1 1 B 0.52 1 C 0.53 2 A 0.74 2 D 0.75 3 F 0.3如果我添加sort = FALSE:merge(df.2, df.1, sort = F) 結果是: class object prob1 2 A 0.72 2 D 0.73 1 B 0.54 1 C 0.55 3 F 0.3但是我想要的是: class object prob1 2 A 0.72 1 B 0.53 2 D 0.74 3 F 0.3 5 1 C 0.5
3 回答

慕田峪9158850
TA貢獻1794條經驗 獲得超7個贊
您只需要創建一個在df.2中給出行號的變量即可。然后,一旦合并了數據,就可以根據此變量對新數據集進行排序。這是一個例子:
df.1<-data.frame(class=c(1,2,3), prob=c(0.5,0.7,0.3))
df.2<-data.frame(object=c('A','B','D','F','C'), class=c(2,1,2,3,1))
df.2$id <- 1:nrow(df.2)
out <- merge(df.2,df.1, by = "class")
out[order(out$id), ]

慕容森
TA貢獻1853條經驗 獲得超18個贊
您還可以inner_join在Hadley的dplyr程序包中(在的下一個迭代中plyr)檢查該函數。它保留了第一個數據集的行順序。與所需解決方案的微小區別在于,它還保留了第一個數據集的原始列順序。因此,它不一定會將我們用于合并的列放在第一個位置。
使用上面的示例,inner_join結果如下所示:
inner_join(df.2,df.1)
Joining by: "class"
object class prob
1 A 2 0.7
2 B 1 0.5
3 D 2 0.7
4 F 3 0.3
5 C 1 0.5
- 3 回答
- 0 關注
- 616 瀏覽
添加回答
舉報
0/150
提交
取消