我有一个数据框,其中一些列包含NA值。
如何删除所有行都包含NA值的列?
我希望这也有所帮助。它可以被制作成一个单一的命令,但我发现将其分为两个命令更容易阅读。我用以下指令制作了一个函数,并且运行非常快速。
naColsRemoval = function (DataTable) {
na.cols = DataTable [ , .( which ( apply ( is.na ( .SD ) , 2 , all ) ) )]
DataTable [ , unlist (na.cols) := NULL , with = F]
}
.SD将允许您将验证限制在表的一部分,如果您希望的话,但它将采用整个表格
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(.)))
janitor::remove_constant()
这个做得非常好。
从我的经验来看,在应用以前的答案时遇到困难,我发现我需要修改方法才能实现这里的问题:
如何摆脱所有行值均为NA的列?
首先请注意,我的解决方案只适用于没有重复列的情况(这个问题在此处(在堆栈溢出上)中已处理)。
其次,它使用了dplyr
。
与其使用
df <- df %>% select_if(~all(!is.na(.)))
我发现有效的方法是
df <- df %>% select_if(~!all(is.na(.)))
select_if
运算符作用于列。在这种情况下,它仅选择不满足标准的那些列。
每个元素都等于“NA”