【问题标题】:Use multiple function to `cbind` nested list使用多个函数来“cbind”嵌套列表
【发布时间】:2019-07-16 09:38:10
【问题描述】:

我想使用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)

我正在尝试 cbind nested data.frame 的第二列,即 btarget,这是一个 10*2 的 data.frame。因此,它将生成 1 个包含 4 个元素的列表,即数据框。

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

【问题讨论】:

  • 是否要将target 添加到每个嵌套数据框,以便将target 添加4 次?
  • 哦,对不起。我将 'nested' 添加到 'target' 4 次。我生成了“目标”,但我错误地删除了代码。我现在在手机上,所以我不能写代码。
  • 它有效,但我想在nested 中绑定第二列data.frames,即b
  • 很抱歉没有很好地提出我的问题。我写了预期的结果。

标签: r dataframe lapply nested-lists


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-12-22
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    相关资源
    最近更新 更多