如何获得r中有NA的列的计数?

如何获得r中有NA的列的计数?,r,count,null,na,R,Count,Null,Na,我有一个数据集,其中列数超过1000。现在我知道有很多列的所有条目都是NA。我想知道有NA的列数。例如 如果有100列具有NA值,我希望输出为100。我已经研究了很多网站来寻找答案,但是没有任何帮助。这就是我试过的 colnames(data)[colSums(is.na(data)) > 0] 但这是返回我所有的专栏。但我只需要计数。是您可以运行的基数 sum(sapply(data, function(col) any(is.na(col))) (适用于数据帧等)sapply返回一

我有一个数据集,其中列数超过1000。现在我知道有很多列的所有条目都是NA。我想知道有NA的列数。例如 如果有100列具有NA值,我希望输出为100。我已经研究了很多网站来寻找答案,但是没有任何帮助。这就是我试过的

colnames(data)[colSums(is.na(data)) > 0]
但这是返回我所有的专栏。但我只需要计数。

是您可以运行的基数

sum(sapply(data, function(col) any(is.na(col)))
(适用于数据帧等)
sapply
返回一个布尔值向量,例如,对于三列data.frame(其中有两列,其中有任何缺少的值)的
[1]True False True
。布尔值转换为可以求和的1


如果
data
是一个矩阵,用
sapply
代替apply和do

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(sapply(data, function(col) any(is.na(col)))
(适用于数据帧等)
sapply
返回一个布尔值向量,例如,对于三列data.frame(其中有两列,其中有任何缺少的值)的
[1]True False True
。布尔值转换为可以求和的1


如果
data
是一个矩阵,用
sapply
代替apply和do

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)) == 0)

您也可以使用
过滤器

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)
数据尝试:

还是相反

sum(colSums(!is.na(data)) == 0)

您也可以使用
过滤器

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)

data我想你可以用这个:

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

的列列表,我想您可以使用这个:

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

的列列表,以获取包含
NA
的列数,您可以使用
colSums
sum

sum(colSums(is.na(data)) > 0)

要获得只包含
NA
的列数,我将使用@ronak shah的解决方案(
sum(colSums(!is.NA(data))==0)

要获得包含
NA
的列数,可以使用
colSums
sum

sum(colSums(is.na(data)) > 0)

要获得只包含
NA
的列数,我将使用@ronak shah的解决方案(
sum(colSums(!is.NA(data))==0)
sum(sappy(data,function(col)any(is.NA(col))
sum(sappy,data,function(col)any(is.NA(col)))
这有助于检查所有字段中是否存在空值columns@JeslinLois我读到:“我想知道有NA的列数”关于我的第一个答案。请参阅更新的ans,了解如何检查包含所有NA的列。@itswlg有效!我总共有1082列,其中588列仅包含NAs。它已被您提供的最新代码正确筛选。@JeslinLois很棒!如果您觉得这回答了您的问题,请单击接受答案左边的复选标记!这有助于检查所有columns@JeslinLois我读到:“我想知道有NA的列数”关于我的第一个答案。请参阅更新的ans,了解如何检查包含所有NA的列。@itswlg有效!我总共有1082列,其中588列仅包含NAs。它已被您提供的最新代码正确筛选。@JeslinLois很棒!如果您觉得这回答了您的问题,请单击接受答案左边的复选标记!