R 如何仅获取具有NA值和NAs数量的列

R 如何仅获取具有NA值和NAs数量的列,r,R,我有一个数据集,有些列有NA值。我只需要显示具有NA值的列名以及每个列中NA值的总数。 我能够解决不同的问题,但不能同时解决这两个问题 这只提供包含NA值的列的列名。但我希望NA总数显示在每个列名下 nacol<- colnames(df)[colSums(is.na(df)) > 0] 我显然是个十足的初学者。我意识到这是一个非常容易解决的问题,但我已经尝试了几个小时,我只是感到沮丧。请帮忙。谢谢大家! 我们可以使用Filter和colSums删除0个值 Filter(funct

我有一个数据集,有些列有NA值。我只需要显示具有NA值的列名以及每个列中NA值的总数。 我能够解决不同的问题,但不能同时解决这两个问题

这只提供包含NA值的列的列名。但我希望NA总数显示在每个列名下

nacol<- colnames(df)[colSums(is.na(df)) > 0]

我显然是个十足的初学者。我意识到这是一个非常容易解决的问题,但我已经尝试了几个小时,我只是感到沮丧。请帮忙。谢谢大家!

我们可以使用
Filter
colSums
删除0个值

Filter(function(x) x > 0, colSums(is.na(df)))
#a c 
#2 1
或者
dplyr

library(dplyr)
df %>% 
  summarise_all(~(sum(is.na(.)))) %>%
  select_if(. > 0)

我们还可以首先选择带有
任意
NA
值的列,然后对它们进行计数

df %>%
  select_if(~any(is.na(.))) %>%
  summarise_all(~(sum(is.na(.))))
数据

df <- data.frame(a = c(2, 3, NA, NA, 1), b = 1:5, c = c(1, 3, 4, NA, 1))
df <- data.frame(a = c(2, 3, NA, NA, 1), b = 1:5, c = c(1, 3, 4, NA, 1))

df使用管道的
purr
dplyr
的可能替代方案(使用空气质量进行再现):

使用@Ronak Shah答案中的数据:

 df %>% 
  keep(~anyNA(.x)) %>% 
   map_dbl(~sum(is.na(.x)))
a c 
2 1 
使用
data.table
(可能有一种方法可以使其更紧凑):

数据:

df我们能做什么

na.omit(na_if(colSums(is.na(df)), 0))
# a c 
# 2 1 

或者如果

library(dplyr)
df %>%
    summarise_if(~ any(is.na(.)), ~sum(is.na(.)))
#  a c
#1 2 1
数据
df
df <- structure(list(a = c(2, 3, NA, NA, 1), b = 1:5, c = c(1, 3, 4, 
NA, 1)), class = "data.frame", row.names = c(NA, -5L))

airquality is builtin
na.omit(na_if(colSums(is.na(df)), 0))
# a c 
# 2 1 
library(dplyr)
df %>%
    summarise_if(~ any(is.na(.)), ~sum(is.na(.)))
#  a c
#1 2 1
df <- data.frame(a = c(2, 3, NA, NA, 1), b = 1:5, c = c(1, 3, 4, NA, 1))