我想计算一个某个字段中 NA 值的数量。假设我的数据帧名为df,我正在查询的列的名称为 col。我想出的方法如下:
NA
df
col
sapply(df$col, function(x) sum(length(which(is.na(x)))))
这是一个好的或者最有效的方法吗?
你想太多了:
sum(is.na(df$col))
如果您希望计算整个数据帧中的NAs数量,也可以使用
sum(is.na(df))
在summary()输出中,该函数还计算__abc1,因此如果想要几个变量中__abc1的和,可以使用此函数。
summary()
如果你正在为数据帧中的每一列寻找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函数
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提出的答案更简单。
purrr
library(purrr) map_dbl(df, ~sum(is.na(.)))
注意:波浪号(~)创建一个匿名函数。还有'。'引用匿名函数的输入,在本例中为data.frame df。
~
获得所有列的NA计数的一个快速简单的Tidyverse解决方案是使用summarise_all(),我认为这比使用purrr或sapply更容易阅读
summarise_all()
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()函数:
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的情况。
useNA
table(df$col, useNA="always")
如果你在每一列中寻找空值,然后一个接一个地打印,那么你可以使用这个。简单的解决方案。
lapply(df, function(x) { length(which(is.na(x)))})
另一个使用complete.cases的选项如下:
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