![](/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.