向 R 中列表子列表中的每个数据框添加一个向量
Adding a vector to each data frame sublisted in a list in R
我有
A <- rep(list(data.frame(a=c(1,2,3,2,1,4),b=c(7,3,1,2,2,1),c=c(2,3,7,2,2,8))),10)
B <- c(2,1,3,2,5,5)
我想将 B
作为列表 A
中每个 data.frame 的一列
类似
[[1]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[2]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
我有 一些东西,但我不知道它是如何工作的 Map()
或 mapply()
...
这里你想要的功能是lapply()
。 lapply()
函数对列表的每个元素和 returns 列表执行另一个功能。
一种可能的解决方案,使用简化的符号,在@BenNorris 的评论中建议如下:
A <- rep(list(data.frame(a=c(1,2,3,2,1,4),b=c(7,3,1,2,2,1),c=c(2,3,7,2,2,8))),10)
B <- c(2,1,3,2,5,5)
lapply(A, cbind, d = B)
#> [[1]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[2]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[3]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[4]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[5]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[6]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[7]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[8]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[9]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[10]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
像这样Map
试试
> Map(cbind, A, d = list(B))
[[1]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[2]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[3]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[4]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[5]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[6]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[7]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[8]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[9]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[10]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
tidyverse
中的类似选项
library(dplyr)
library(dplyr)
map(A, mutate, d = B)
-输出
[[1]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[2]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
...
我有
A <- rep(list(data.frame(a=c(1,2,3,2,1,4),b=c(7,3,1,2,2,1),c=c(2,3,7,2,2,8))),10)
B <- c(2,1,3,2,5,5)
我想将 B
作为列表 A
类似
[[1]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[2]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
我有 Map()
或 mapply()
...
这里你想要的功能是lapply()
。 lapply()
函数对列表的每个元素和 returns 列表执行另一个功能。
一种可能的解决方案,使用简化的符号,在@BenNorris 的评论中建议如下:
A <- rep(list(data.frame(a=c(1,2,3,2,1,4),b=c(7,3,1,2,2,1),c=c(2,3,7,2,2,8))),10)
B <- c(2,1,3,2,5,5)
lapply(A, cbind, d = B)
#> [[1]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[2]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[3]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[4]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[5]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[6]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[7]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[8]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[9]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
#>
#> [[10]]
#> a b c d
#> 1 1 7 2 2
#> 2 2 3 3 1
#> 3 3 1 7 3
#> 4 2 2 2 2
#> 5 1 2 2 5
#> 6 4 1 8 5
像这样Map
试试
> Map(cbind, A, d = list(B))
[[1]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[2]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[3]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[4]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[5]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[6]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[7]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[8]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[9]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[10]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
tidyverse
library(dplyr)
library(dplyr)
map(A, mutate, d = B)
-输出
[[1]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
[[2]]
a b c d
1 1 7 2 2
2 2 3 3 1
3 3 1 7 3
4 2 2 2 2
5 1 2 2 5
6 4 1 8 5
...