我想在一个数据帧列中计算NA值的数量。假设我的数据帧称为df,我正在考虑的列的名称是col。我提出的方法如下:

sapply(df$col, function(x) sum(length(which(is.na(x)))))  

这是一个好的/最有效的方法吗?


当前回答

你可以用它来计算每一列中NA或空格的数量

colSums(is.na(data_set_name)|data_set_name == '')

其他回答

在summary()输出中,该函数还计算NAs的数量,因此如果需要几个变量中NAs的总和,可以使用该函数。

获得所有列NA计数的一个快速简单的Tidyverse解决方案是使用summarise_all(),我认为这比使用purrr或sapply更容易读取解决方案

library(tidyverse)
# Example data
df <- tibble(col1 = c(1, 2, 3, NA), 
             col2 = c(NA, NA, "a", "b"))

df %>% summarise_all(~ sum(is.na(.)))
#> # A tibble: 1 x 2
#>    col1  col2
#>   <int> <int>
#> 1     1     2

或者使用更现代的across()函数:

df %>% summarise(across(everything(), ~ sum(is.na(.))))

你可以用它来计算每一列中NA或空格的数量

colSums(is.na(data_set_name)|data_set_name == '')

如果您希望计算整个数据帧中的NAs数量,也可以使用

sum(is.na(df))

用户rrs的答案是正确的,但它只告诉你在数据帧的特定列中NA值的数量,你正在传递来获得整个数据帧的NA值的数量,试试这个:

apply(<name of dataFrame>, 2<for getting column stats>, function(x) {sum(is.na(x))})

这就行了