我想使用cbind
将列表与数据框嵌套在一起。
让我们举个例子。 nested
是嵌套列表。它有2个元素,每个元素有2个data.frame。因此,nested
是
第一个元素= data.frame 1 + data.frame2 / 第二个元素= data.frame 1 + data.frame 2
given<-replicate(2,list(data.frame(unlist(replicate(10,sample(c(0.2,0.3,0.4,0.1),2,replace=FALSE),simplify=FALSE)),ncol=2)))
colnames(given[[1]])<-c('a','b')
colnames(given[[2]])<-c('a','b')
nested<-list(given, given)
我正在尝试将nested
data.frame的第二列与b
绑定在一起,target
是一个10 * 2 data.frame。因此,它将生成1个包含4个元素的列表,即dataframe。
target<-data.frame(sample(c("a","b","c","d"),10,replace=TRUE),sample(c("a","b","c","d"),10,replace=TRUE))
colnames(target)<-c("1st","2nd")
target
我尝试了lapply
函数。
last<-lapply(seq_along(nested), function(x) function(y) cbind(target, nested[[x]][[y]][,c("b")]))
但是,它产生了错误。
[[1]]
function (y)
cbind(target, nested[[x]][[y]][,c("b")]))
<bytecode: 0x00000000e092abe0>
<environment: 0x00000000e0948390>
肯定有问题,但我找不到原因。非常感谢您的帮助。
*其他信息:我写下了预期的结果。
nested
如下。
[[1]]
[[1]][[1]]
a b
[1,] 0.3 0.3
[2,] 0.2 0.4
[3,] 0.1 0.2
[4,] 0.3 0.3
[5,] 0.3 0.4
[6,] 0.1 0.2
[7,] 0.3 0.4
[8,] 0.2 0.3
[9,] 0.1 0.3
[10,] 0.3 0.4
[[1]][[2]]
a b
[1,] 0.3 0.2
[2,] 0.4 0.4
[3,] 0.2 0.4
[4,] 0.4 0.1
[5,] 0.1 0.4
[6,] 0.4 0.3
[7,] 0.1 0.4
[8,] 0.4 0.2
[9,] 0.2 0.4
[10,] 0.4 0.2
[[2]]
[[2]][[1]]
a b
[1,] 0.3 0.3
[2,] 0.2 0.4
[3,] 0.1 0.2
[4,] 0.3 0.3
[5,] 0.3 0.4
[6,] 0.1 0.2
[7,] 0.3 0.4
[8,] 0.2 0.3
[9,] 0.1 0.3
[10,] 0.3 0.4
[[2]][[2]]
a b
[1,] 0.3 0.2
[2,] 0.4 0.4
[3,] 0.2 0.4
[4,] 0.4 0.1
[5,] 0.1 0.4
[6,] 0.4 0.3
[7,] 0.1 0.4
[8,] 0.4 0.2
[9,] 0.2 0.4
[10,] 0.4 0.2
和target
是..
1st 2nd
1 a b
2 a a
3 c a
4 b a
5 b b
6 c c
7 d b
8 a a
9 c a
10 d b
nested
的每个data.frame有2列,分别是a
和b
。我的预期结果是...
[1]
1st 2nd b
1 a b 0.3
2 a a 0.4
3 c a 0.2
4 b a 0.3
5 b b 0.4
6 c c 0.2
7 d b 0.4
8 a a 0.3
9 c a 0.3
10 d b 0.4
[2]
1st 2nd b
1 a b 0.2
2 a a 0.4
3 c a 0.4
4 b a 0.1
5 b b 0.4
6 c c 0.3
7 d b 0.4
8 a a 0.2
9 c a 0.4
10 d b 0.2
[3]
1st 2nd b
1 a b 0.3
2 a a 0.4
3 c a 0.2
4 b a 0.3
5 b b 0.4
6 c c 0.2
7 d b 0.4
8 a a 0.3
9 c a 0.3
10 d b 0.4
[4]
1st 2nd b
1 a b 0.2
2 a a 0.4
3 c a 0.4
4 b a 0.1
5 b b 0.4
6 c c 0.3
7 d b 0.4
8 a a 0.2
9 c a 0.4
10 d b 0.2
答案 0 :(得分:0)
我们可以使用嵌套的lapply
并从每个列表中获取"b"
列,并使用cbind
来target
lapply(nested, function(x) lapply(x, function(y) cbind(target, b = y[["b"]])))