我想合并两个数据框,保持其中一个数据框的原始行顺序(下例中的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 prob
1 1 B 0.5
2 1 C 0.5
3 2 A 0.7
4 2 D 0.7
5 3 F 0.3
如果我添加sort = FALSE
:
merge(df.2, df.1, sort = F)
结果是:
class object prob
1 2 A 0.7
2 2 D 0.7
3 1 B 0.5
4 1 C 0.5
5 3 F 0.3
但我想要的是:
class object prob
1 2 A 0.7
2 1 B 0.5
3 2 D 0.7
4 3 F 0.3
5 1 C 0.5
最佳答案
您只需创建一个变量来给出 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), ]
关于r - 合并两个数据框,同时保持原始行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17878048/