![](/img/trans.png)
[英]Map a list of dataframe columns into another dataframe r
[英]Add a column from one dataframe in a list to another dataframe in another list with map2
我有两个包含不同数据框的列表(原始数据每个列表有 70 个数据框,总计 200 万行)。
df1 <- data.frame(colA = LETTERS[1:5], colB = seq(1,5))
df2 <- data.frame(colA = LETTERS[6:10], colB = seq(6,10))
list1 <- list(df1,df2)
df3 <- data.frame(colA = LETTERS[1:5], colB = seq(11,15))
df4 <- data.frame(colA = LETTERS[6:10], colB = seq(16,20))
list2 <- list(df3,df4)
我想创建一个新列表(例如desired_list
)或更新现有的list1
,从list2
的每个 dataframe 添加colB
( df3
和df4
)相应地命名新列并重新命名旧列。 list1
和list2
具有相同数量的数据帧,每个数据帧具有相同的行数( df1
具有相同的df3
行数, df2
具有相同的df4
行数,依此类推)。 所需的 output 应如下所示。
desired_df1 <- data.frame(colA = LETTERS[1:5], colB_1 = seq(1,5), colB_2 = seq(11,15))
desired_df2 <- data.frame(colA = LETTERS[6:10], colB_1 = seq(6,10), colB_2 = seq(16,20))
desired_list <- list(desired_df1,desired_df2)
我想我可以用purrr::map2
做到这一点,但我对列表不是很熟悉,而且我在map2
格式和索引方面遇到困难。 到目前为止我试过:
desired_list <- lapply(list1,
function(df) {purrr::map2(.x = list1, .y = list2, .f = list1$colB_2 <- list2$colB)})
但我得到:
Error in `as_mapper()`:
! Can't convert `.f`, NULL, to a function.
像下面这样的东西:
map2(list1, list2,
~data.frame(colA = .x$colA,
colB_1 = .x$colB,
colB_2 = .y$colB))
##> [[1]]
##> colA colB_1 colB_2
##> 1 A 1 11
##> 2 B 2 12
##> 3 C 3 13
##> 4 D 4 14
##> 5 E 5 15
##>
##> [[2]]
##> colA colB_1 colB_2
##> 1 F 6 16
##> 2 G 7 17
##> 3 H 8 18
##> 4 I 9 19
##> 5 J 10 20
您可以为此使用普通的旧Map
:
Map(function(a, b) { a$colB_2 <- b$colB; a }, list1, list2)
#> [[1]]
#> colA colB colB_2
#> 1 A 1 11
#> 2 B 2 12
#> 3 C 3 13
#> 4 D 4 14
#> 5 E 5 15
#>
#> [[2]]
#> colA colB colB_2
#> 1 F 6 16
#> 2 G 7 17
#> 3 H 8 18
#> 4 I 9 19
#> 5 J 10 20
或者也可以从list2
中提取colB
并transform
list1
Map(transform, list1, colB_2 = lapply(list2, `[[`, "colB"))
-输出
[[1]]
colA colB colB_2
1 A 1 11
2 B 2 12
3 C 3 13
4 D 4 14
5 E 5 15
[[2]]
colA colB colB_2
1 F 6 16
2 G 7 17
3 H 8 18
4 I 9 19
5 J 10 20
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.