使用字符向量索引嵌套的命名数据框列表 - R

时间:2018-04-11 02:46:10

标签: r list dataframe indexing

我有一个嵌套的命名数据框列表,如下所示:

mylist2 <- list(
  list(df1.a = data.frame(replicate(2,sample(0:1,5,rep=TRUE))), df2.b = data.frame(replicate(2,sample(0:1,5,rep=TRUE)))),
  list(df3.c = data.frame(replicate(2,sample(0:1,5,rep=TRUE))), df4.d = data.frame(replicate(2,sample(0:1,5,rep=TRUE)))),
  list(df5.e = data.frame(replicate(2,sample(0:1,5,rep=TRUE))), df6.f = data.frame(replicate(2,sample(0:1,5,rep=TRUE)))))

我运行测试(不重要的是什么类型的测试)并且它产生一个字符向量,告诉我这个列表中哪些数据帧很重要:

test
[1] "df1.a" "df5.e"

使用此字符向量从嵌套列表中提取这些数据帧的最有效方法是什么?该测试仅显示第二个列表的名称,因此nestedlist[test]不起作用。

2 个答案:

答案 0 :(得分:1)

这是一个可重复的示例,包括使用嵌套list s的示例数据:

# Sample data
lst <- list(
    list(df1.a = 1, df2.b = 2),
    list(df3.c = 3, df4.d = 4),
    list(df5.e = 5, df6.f = 6))
test <- c("df1.a", "df5.e");

ret <- lapply(lst, function(x) x[names(x) %in% test])
ret[sapply(ret, length) > 0];
#[[1]]
#[[1]]$df1.a
#[1] 1
# 
# 
#[[2]]
#[[2]]$df5.e
#[1] 5

答案 1 :(得分:1)

正如OP提到的那样,它是一个嵌套的list,我们可以遍历最初的list,然后用list [的元素>

lapply(mylist2, '[', test)

或使用tidyverse

library(tidyverse)
map(mylist2, ~ .x %>% 
                   select(test))

更新

基于更新的数据集:

Filter(length, lapply(mylist2, function(x) x[intersect(test, names(x))]))