我敢肯定有一个很简单的答案,但是我找不到。在另一篇帖子中,How do I remove empty data frames from a list?我曾研究过从数据帧列表中删除一个空数据帧。
但是,如果列表中的一项没有被归类为数据框而只是一个NA值,该怎么办?稍微修改上面问题的参数,您将:
psycopg2
在这种情况下,我想删除M2,但是我有几个空数据帧的示例,因此我想要一个同时删除所有M2的函数。
对于上述问题,我已经尝试了几种解决方案,这些解决方案均无效:
psycopg2
在此先感谢您的帮助!
答案 0 :(得分:3)
一种选择是使用Filter
检查列表元素是data.frame
s
Filter(is.data.frame, mlist)
#[[1]]
# X1 X2
#1 1 3
#2 2 4
#[[2]]
# X1 X2
#1 9 11
#2 10 12
答案 1 :(得分:2)
这是获得结果的一种稍微不同的方式
library(tidyverse)
M1 <- data.frame(matrix(1:4, nrow = 2, ncol = 2))
M2 <- NA
M3 <- data.frame(matrix(9:12, nrow = 2, ncol = 2))
M4 <- NA
mlist <- list(M1, M2, M3,M4)
indexes <- tibble()
for (i in 1:length(mlist)) {
if (is.na(mlist[[i]]) == TRUE) {
new_index <- tibble(index = i)
indexes <- bind_rows(new_index,indexes)
}
}
indexnums <- indexes %>% pull(index)
mlist <- mlist[-indexnums]
使用此方法,检查每个列表元素是否为NA,然后将索引号添加到表中,然后将这些索引号拉出并对该列表进行子集化。如果您的数据集中有很多这些,应该将它们全部删除。
答案 2 :(得分:1)
希望能为您提供帮助。
# Method 1
mlist[!is.na(mlist)]
# Method 2
replace(mlist, is.na(mlist), NULL)