确定某列中 NA 值的个数

我想计算一个某个字段中 NA 值的数量。假设我的数据帧名为df,我正在查询的列的名称为 col。我想出的方法如下:

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

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

530636 次浏览

你想太多了:

sum(is.na(df$col))

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

sum(is.na(df))

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

如果你正在为数据帧中的每一列寻找NA计数,那么:

na_count <-sapply(x, function(y) sum(length(which(is.na(y)))))

应该会给你一个包含每列计数的列表。

na_count <- data.frame(na_count)

应该像这样在数据框架中输出数据:

----------------------
| row.names | na_count
------------------------
| column_1  | count

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

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

这就行了

这个表格与凯文·奥戈洛斯的表格略有不同:

na_count <-function (x) sapply(x, function(y) sum(is.na(y)))

返回命名为int数组的NA计数

试试这个:

length(df$col[is.na(df$col)])

一种统计数据帧中每一列空值的方法:

library(tidyverse)
library(purrr)


df %>%
map_df(function(x) sum(is.na(x))) %>%
gather(feature, num_nulls) %>%
print(n = 100)

我从本地目录读取一个csv文件。以下代码适用于我。

# to get number of which contains na
sum(is.na(df[, c(columnName)]) # to get number of na row


# to get number of which not contains na
sum(!is.na(df[, c(columnName)])


#here columnName is your desire column name

试试colSums函数

df <- data.frame(x = c(1,2,NA), y = rep(NA, 3))


colSums(is.na(df))


#x y
#1 3

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

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

类似于hute37的答案,但使用purrr包。我认为这种tidyverse方法比AbiK提出的答案更简单。

library(purrr)
map_dbl(df, ~sum(is.na(.)))

注意:波浪号(~)创建一个匿名函数。还有'。'引用匿名函数的输入,在本例中为data.frame df

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

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(.))))
sapply(name of the data, function(x) sum(is.na(x)))

为了保证完整性,你也可以在table中使用useNA参数。例如,table(df$col, useNA="always")将计算所有非NA的情况和NA的情况。

如果你在每一列中寻找空值,然后一个接一个地打印,那么你可以使用这个。简单的解决方案。

lapply(df, function(x) { length(which(is.na(x)))})

另一个使用complete.cases的选项如下:

df <- data.frame(col = c(1,2,NA))
df
#>   col
#> 1   1
#> 2   2
#> 3  NA
sum(!complete.cases(df$col))
#> [1] 1

创建于2022-08-27,包含reprex v2.0.2