删除数据框列表中的NA值

时间:2018-11-07 08:46:51

标签: r list dataframe na

我敢肯定有一个很简单的答案,但是我找不到。在另一篇帖子中,How do I remove empty data frames from a list?我曾研究过从数据帧列表中删除一个空数据帧。

但是,如果列表中的一项没有被归类为数据框而只是一个NA值,该怎么办?稍微修改上面问题的参数,您将:

psycopg2

在这种情况下,我想删除M2,但是我有几个空数据帧的示例,因此我想要一个同时删除所有M2的函数。

对于上述问题,我已经尝试了几种解决方案,这些解决方案均无效:

psycopg2

在此先感谢您的帮助!

3 个答案:

答案 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)