我如何合并列表中的数据框按行?

3
假设我有以下两个列表。我想要取list2的第一个条目,并将此数据框与list1合并。对于所有条目都执行此操作。
data1 <- data.frame(id = 1:6,                                  
                    x1 = c(5, 1, 4, 9, 1, 2),
                    x2 = c("A", "Y", "G", "F", "G", "Y"))
data2 <- data.frame(id = 4:9,                                  
                    y1 = c(3, 3, 4, 1, 2, 9),
                    y2 = c("a", "x", "a", "x", "a", "x"))
l1 <- list(data1, data2)
l2 <- list(data1, data2)

我期望的结果是一个长度为2的列表。每个条目应该是一个具有12行和3列的数据框。
2个回答

2

基于 mapply 的另一个可能的解决方案:

mapply(rbind, l1, l2, SIMPLIFY = F)

#> [[1]]
#>    id x1 x2
#> 1   1  5  A
#> 2   2  1  Y
#> 3   3  4  G
#> 4   4  9  F
#> 5   5  1  G
#> 6   6  2  Y
#> 7   1  5  A
#> 8   2  1  Y
#> 9   3  4  G
#> 10  4  9  F
#> 11  5  1  G
#> 12  6  2  Y
#> 
#> [[2]]
#>    id y1 y2
#> 1   4  3  a
#> 2   5  3  x
#> 3   6  4  a
#> 4   7  1  x
#> 5   8  2  a
#> 6   9  9  x
#> 7   4  3  a
#> 8   5  3  x
#> 9   6  4  a
#> 10  7  1  x
#> 11  8  2  a
#> 12  9  9  x

1
我们可以使用rbindMap将两个list中相应的数据框元素进行合并。
Map(rbind, l1, l2)

-输出

[[1]]
   id x1 x2
1   1  5  A
2   2  1  Y
3   3  4  G
4   4  9  F
5   5  1  G
6   6  2  Y
7   1  5  A
8   2  1  Y
9   3  4  G
10  4  9  F
11  5  1  G
12  6  2  Y

[[2]]
   id y1 y2
1   4  3  a
2   5  3  x
3   6  4  a
4   7  1  x
5   8  2  a
6   9  9  x
7   4  3  a
8   5  3  x
9   6  4  a
10  7  1  x
11  8  2  a
12  9  9  x

或者使用purrr中的map2

library(purrr)
library(dplyr)
map2(l1, l2, bind_rows)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接