使用多种功能来“绑定”嵌套列表

时间:2019-07-16 09:38:10

标签: r dataframe lapply nested-lists

我想使用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列,分别是ab。我的预期结果是...

[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

1 个答案:

答案 0 :(得分:0)

我们可以使用嵌套的lapply并从每个列表中获取"b"列,并使用cbindtarget

lapply(nested, function(x) lapply(x, function(y) cbind(target, b = y[["b"]])))