假设我要从名为list
的{{1}}到一个名为data.frame
的子设置变量的子集。
子集设置后,long
中的某些data.frame
可能为空,因为它们中的子集不匹配。
我想知道如何在最终输出中删除所有这样的空list
。
一个简单的示例以及我失败的解决方案如下所示:
data.frame
答案 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]