我想合并两个数据框,以保持其中一个的原始行顺序(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 关注
- 570 浏览
添加回答
举报
0/150
提交
取消