在R中进行子设置后如何删除列表中的空data.frame

时间:2019-05-10 16:01:12

标签: r list function dataframe

假设我要从名为list的{​​{1}}到一个名为data.frame的子设置变量的子集。

子集设置后,long中的某些data.frame可能为空,因为它们中的子集不匹配。

我想知道如何在最终输出中删除所有这样的空list

一个简单的示例以及我失败的解决方案如下所示:

data.frame

3 个答案:

答案 0 :(得分:5)

只需Filter行数:

new_list_of_dfs <- Filter(NROW, list_of_dfs)

答案 1 :(得分:1)

我们可以使用keep

library(purrr)
keep(h, ~ nrow(.x) > 0)
#$Study2
#   d long
#1  9 TRUE
#2 10 TRUE

或者使用sapply中的base R创建一个逻辑条件,并使用Extract list个元素

h[sapply(h, nrow) > 0]

答案 2 :(得分:1)

akrun 的答案有效,但要理解为什么最后一行代码不起作用(for(i in 1:2) if(nrow(h[[i]]) == 0) h[[i]] <- NULL else h[[i]]):这是因为您要删除列表中的元素,循环可以完成。因此,首先将查询保存在索引中,然后使用该查询的结果在第二行中删除元素。更冗长,但为您提供更多学习机会:

index <- vector(mode = 'logical', length = length(h)) #initialize index as all FALSE
for (i in 1:length(h)) { #this is your last line of code, modified
  if(nrow(h[[i]]) != 0) {
    index[i] <- TRUE
    } else {next} 
}
h <- h[index]