我有一个列超过1000的数据集。现在我知道有很多列的所有条目都是NA。我想知道有多少列是NA。例如,如果有100列具有NA值,我希望输出为100。我研究了很多网站以找到答案,但没有任何帮助。这就是我尝试过的。
colnames(data)[colSums(is.na(data)) > 0]
但这会把所有的专栏都还给我。但我只想要伯爵。
是运行的基础
sum(sapply(data, function(col) any(is.na(col)))
(适用于例如data.frames(。sapply
返回一个布尔值向量,例如三列data.frame的[1] True False True
,其中有两列缺少值。布尔值转换为可以求和的1。
如果data
是矩阵,则用sapply
代替apply并执行
sum(apply(as.matrix(a), 2, function(col) any(is.na(col))))
编辑再次阅读OP的问题后,我意识到OP想要列中包含所有NA的列。这可以通过用any
代替all
来获得,即
sum(sapply(data, function(col) all(is.na(col))))
尝试:
sum(colSums(is.na(data)) == nrow(data))
#[1] 2
或者相反的
sum(colSums(!is.na(data)) == 0)
您也可以使用Filter
length(Filter(function(x) all(is.na(x)), data))
或使用dplyr
:
library(dplyr)
data %>% select_if(~all(is.na(.))) %>% ncol
数据
data <- data.frame(a = c(1, 2, NA, 4), b = NA, c = letters[1:4], d = NA)
要获得包含NA
的列数,可以使用colSums
和sum
:
sum(colSums(is.na(data)) > 0)
为了获得仅包含NA
的列数,我将使用@ronak shah(sum(colSums(!is.na(data)) == 0)
(的解决方案
我猜你可以使用这个:
library(DataExplorer)
plot_missing(iris) #this will print all the missing values in the plot
profile_missing(iris) #this will print all the missing values columns with numbers like this
输出结果
一旦您在数据帧中获得它们,keep columns>0,您将获得具有NA
的列的列表。