在单个列表中组合不同列表的数据帧

时间:2016-07-13 11:52:26

标签: r

我有两个(或更多)相同数量的数据框列表,并希望将不同列表的数据框组合在一个列表中。因此,作为输出,我想获得与每个单独列表中相同数量的数据帧的单个列表。

听起来有点复杂,但基本上我想以可扩展且更容易的方式做到这一点:

d1 <- data.frame(y1=c(1,2,3),y2=c(4,5,6))
d2 <- data.frame(y1=c(3,2,1),y2=c(6,5,4))
l1 <- list(d1,d2)
d3 <- data.frame(y1=c(11,22,33),y2=c(44,55,66))
d4 <- data.frame(y1=c(33,22,11),y2=c(66,55,44))
l2 <- list(d3,d4)

new_d1 <- do.call(rbind,list(l1[[1]],l2[[1]]))
new_d2 <- do.call(rbind,list(l1[[2]],l2[[2]]))
output <- list(new_d1,new_d2)

输出应该如下所示:

> output
[[1]]
y1 y2
1  1  4
2  2  5
3  3  6
4 11 44
5 22 55
6 33 66

[[2]]
y1 y2
1  3  6
2  2  5
3  1  4
4 33 66
5 22 55
6 11 44

此外,如果l1和l2已经自己位于列表中,我可以使用哪个功能?

我已经查看了lapply()sapply(),但这两个功能并不适合。在论坛中,我只找到在单个数据框中组合数据帧列表的解决方案。

1 个答案:

答案 0 :(得分:3)

l1l2是全球环境中的列表的简单情况下,您可以使用

Map(rbind, l1, l2)

对于另一种情况,当l1l2已经位于list时,您可以使用

l <- list(l1, l2)
Reduce(function(...) Map(rbind, ...), l)