首页 > 解决方案 > R rbind 同时保留每个数据帧中的顺序或行

问题描述

我需要合并 2 个数据帧,同时保留它们在每个数据帧中的出现顺序:

x = data.frame(a=1:3, b=2:4, c=3:5)
y = data.frame(a=c(10, 20, 30), b=c(20, 30, 40), c=c(30, 40, 50))

我想要的是:

> z 

a   b   c
1   2   3
10  20  30
2   3   4
20  30  40
3   4   5
30  40  50

但是 rbind 所做的是在第一个数据帧下添加第二个数据帧。

标签: rrbind

解决方案


试试这个单线

do.call("rbind", Map("rbind", split(x, 1:nrow(x)), split(y, 1:nrow(y))))

x如果并且y在问题中给出了这个data.frame :

      a  b  c
1.1   1  2  3
1.2  10 20 30
2.2   2  3  4
2.21 20 30 40
3.3   3  4  5
3.31 30 40 50

它逐行拆分每个数据帧,然后将 rbind 拆分的相应组件。然后它会重新绑定所有这些。请注意,即使列具有不同的类型,这种单行也可以工作。例如,即使:

x <- data.frame(a = letters[1:3], b = 1:3, c = c(TRUE, FALSE, TRUE))
y <- data.frame(a = LETTERS[1:3], b = 11:13, c = c(FALSE, TRUE, FALSE))

推荐阅读