删除数据框中所有值均为NA的列

206

我有一个数据框,其中一些列包含NA值。

如何删除所有行都包含NA值的列?

14个回答

1

我希望这也有所帮助。它可以被制作成一个单一的命令,但我发现将其分为两个命令更容易阅读。我用以下指令制作了一个函数,并且运行非常快速。

naColsRemoval = function (DataTable) {
     na.cols = DataTable [ , .( which ( apply ( is.na ( .SD ) , 2 , all ) ) )]
     DataTable [ , unlist (na.cols) := NULL , with = F]
     }

.SD将允许您将验证限制在表的一部分,如果您希望的话,但它将采用整个表格


1
library(dplyr)

# create a sample data frame
df <- data.frame(x = c(1, 2, NA, 4),
                 y = c(NA, NA, NA, NA),
                 z = c(6, 7, NA, 9))

# remove columns with all NAs
df <- df %>%
  select_if(~!all(is.na(.)))

0
janitor::remove_constant() 

这个做得非常好。


1
在这里使用janitor::remove_empty()可能更合适。?remove_empty =“从数据框或矩阵中删除空行和/或空列”。 - Thomas Moore

0

从我的经验来看,在应用以前的答案时遇到困难,我发现我需要修改方法才能实现这里的问题:

如何摆脱所有行值均为NA的列?

首先请注意,我的解决方案只适用于没有重复列的情况(这个问题在此处(在堆栈溢出上)中已处理)。

其次,它使用了dplyr

与其使用

df <- df %>% select_if(~all(!is.na(.)))

我发现有效的方法是

df <- df %>% select_if(~!all(is.na(.)))

重点是“非”符号“!”需要在全称量词的外部。即select_if运算符作用于列。在这种情况下,它仅选择不满足标准的那些列。

每个元素都等于“NA”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接