从R中的data.frames列表中提取非null元素

时间:2019-08-24 14:57:16

标签: r list loops dataframe lapply

我有一个名为G的data.frames列表。

在BASE R中,我想知道如何分别提取dint和{{中的元素SDA 1}}跳过任何B元素?

我想要的输出是: NULL

以下是数据:

dint = list(A = 1:3, B = c(1:4, 5:6) )
                        SD = list(A = 0:2, B = c(2:5, 3:4) )

2 个答案:

答案 0 :(得分:2)

我们可以只调用一个lapply并提取组件

lapply(G, function(x) do.call(rbind, x)$dint)
#$A
#[1] 1 2 3

#$B
#[1] 1 2 3 4 5 6

或者提取“ SD”

lapply(G, function(x) do.call(rbind, x)$SD)  
#$A
#[1] 0 1 2

#$B
#[1] 2 3 4 5 3 4

可以做成一个函数

f1 <- function(lstI, elementName){
            lapply(lstI, function(x) do.call(rbind, x)[[elementName]])
  }
f1(G, "dint")
f1(G, "SD")

rbind将同时获得两列

lapply(G, function(x) do.call(rbind, x))

答案 1 :(得分:1)

我们可以使用嵌套的lapply

lapply(G, function(x) unlist(lapply(x, `[[`, 'dint'), use.names = FALSE))

#$A
#[1] 1 2 3

#$B
#[1] 1 2 3 4 5 6

"SD"也是如此

lapply(G, function(x) unlist(lapply(x, `[[`, 'SD'), use.names = FALSE))

#$A
#[1] 0 1 2

#$B
#[1] 2 3 4 5 3 4