合并不同列表中的多个数据框

时间:2020-03-03 15:17:39

标签: r list dataframe

我想将一个df与多个逻辑向量合并。这是我想要的示例:

a <- c(1, 2, 3, 4, 5)
b <- c(1.1, 5.4, 9.3, 6.1 ,4.5)
df <- data.frame(cbind(a,b))
df1 <- data.frame(cbind(a,b))
df2 <- data.frame(cbind(a,b))
list1 <- list(df, df1, df2)

在我的数据中,df1df2df不同,但更容易。 我有逻辑向量,我想将它们与第一个列表的第一个df绑定。

vc <- c(TRUE, FALSE, TRUE, TRUE,FALSE)
vc1 <- c(FALSE, FALSE, TRUE, TRUE, FALSE)
vc2 <- c(TRUE, TRUE, TRUE, TRUE, TRUE)
list2 <- list(vc, vc1, vc2)

我知道一次要怎么做。

list2[[1]] <- cbind(vc, df)
list2[[2]] <- cbind(vc1, df)
list2[[3]] <- cbind(vc2, df)

所以最终结果将是:

list2
[[1]]
     vc a   b
1  TRUE 1 1.1
2 FALSE 2 5.4
3  TRUE 3 9.3
4  TRUE 4 6.1
5 FALSE 5 4.5

[[2]]
    vc1 a   b
1 FALSE 1 1.1
2 FALSE 2 5.4
3  TRUE 3 9.3
4  TRUE 4 6.1
5 FALSE 5 4.5

[[3]]
   vc2 a   b
1 TRUE 1 1.1
2 TRUE 2 5.4
3 TRUE 3 9.3
4 TRUE 4 6.1
5 TRUE 5 4.5

但是我确实有很多数据,要花上几年的时间。

3 个答案:

答案 0 :(得分:2)

您可以在这里使用lapply:

a <- c(1, 2, 3, 4, 5)
b <- c(1.1, 5.4, 9.3, 6.1 ,4.5)
df <- data.frame(a,b)

vc <- c(TRUE, FALSE, TRUE, TRUE,FALSE)
vc1 <- c(FALSE, FALSE, TRUE, TRUE, FALSE)
vc2 <- c(TRUE, TRUE, TRUE, TRUE, TRUE)
list2 <- list(vc, vc1, vc2)

lapply(list2, function(l) cbind(l, df))
#> [[1]]
#>       l a   b
#> 1  TRUE 1 1.1
#> 2 FALSE 2 5.4
#> 3  TRUE 3 9.3
#> 4  TRUE 4 6.1
#> 5 FALSE 5 4.5
#> 
#> [[2]]
#>       l a   b
#> 1 FALSE 1 1.1
#> 2 FALSE 2 5.4
#> 3  TRUE 3 9.3
#> 4  TRUE 4 6.1
#> 5 FALSE 5 4.5
#> 
#> [[3]]
#>      l a   b
#> 1 TRUE 1 1.1
#> 2 TRUE 2 5.4
#> 3 TRUE 3 9.3
#> 4 TRUE 4 6.1
#> 5 TRUE 5 4.5

答案 1 :(得分:2)

如果要使用提供的所有对象:将矢量和数据帧放入列表中,并使用cbind逐一Map

Map(cbind, vc=list(vc, vc1, vc2), list(df, df1, df2))
# [[1]]
#      vc a   b
# 1  TRUE 1 1.1
# 2 FALSE 2 5.4
# 3  TRUE 3 9.3
# 4  TRUE 4 6.1
# 5 FALSE 5 4.5
# 
# [[2]]
#      vc a   b
# 1 FALSE 1 1.1
# 2 FALSE 2 5.4
# 3  TRUE 3 9.3
# 4  TRUE 4 6.1
# 5 FALSE 5 4.5
# 
# [[3]]
#     vc a   b
# 1 TRUE 1 1.1
# 2 TRUE 2 5.4
# 3 TRUE 3 9.3
# 4 TRUE 4 6.1
# 5 TRUE 5 4.5

答案 2 :(得分:2)

带有bind_colsmap的选项

library(purrr)
map(list2, ~ bind_cols(l = .x, df))