我想在包含缺失值的大型数据框中显示列的名称 . 基本上,我想要相当于complete.cases(df)但是对于列而不是行 . 有些列是非数字的,所以类似于
names(df[is.na(colMeans(df))])
返回“colMeans中的错误(df):'x'必须是数字 . ”因此,我目前的解决方案是转置数据框并运行complete.cases,但我猜测有一些变体(或者plyr中的某些东西)效率更高 .
nacols <- function(df) {
names(df[,!complete.cases(t(df))])
}
w <- c("hello","goodbye","stuff")
x <- c(1,2,3)
y <- c(1,NA,0)
z <- c(1,0, NA)
tmp <- data.frame(w,x,y,z)
nacols(tmp)
[1] "y" "z"
有人能告诉我一个更有效的功能来识别有NA的列吗?
3 回答
这是我所知道的最快的方式:
EDIT:
我想其他人都写完了所以这里完成了:
如果您在WIN 7机器上对4个解决方案进行微基准测试:
这是一个视觉效果:
Edit 当时我写的这个
anyNA
不存在或者我没有意识到它 . 根据?anyNA
的帮助手册,这可能会加快速度......这是一种方式:
希望能帮助到你,
马诺埃尔
单程...
说明:由于结果
y
是逻辑向量,names(y[y])
仅返回y
为TRUE的情况下的y名称 .