【发布时间】:2014-07-24 12:33:13
【问题描述】:
我想计算数据框列中NA 值的数量。假设我的数据框名为df,而我正在考虑的列的名称是col。我想出的方法如下:
sapply(df$col, function(x) sum(length(which(is.na(x)))))
这是一种很好/最有效的方法吗?
【问题讨论】:
我想计算数据框列中NA 值的数量。假设我的数据框名为df,而我正在考虑的列的名称是col。我想出的方法如下:
sapply(df$col, function(x) sum(length(which(is.na(x)))))
这是一种很好/最有效的方法吗?
【问题讨论】:
获得所有列的 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(.))))
【讨论】:
如果您要在每一列中查找空值以一个接一个地打印,那么您可以使用它。简单的解决方案。
lapply(df, function(x) { length(which(is.na(x)))})
【讨论】:
为了完整起见,您还可以使用表中的useNA 参数。例如table(df$col, useNA="always") 将计算所有非NA 的情况和NA 的情况。
【讨论】:
sapply(name of the data, function(x) sum(is.na(x)))
【讨论】:
类似于 hute37 的答案,但使用 purrr 包。我认为这种 tidyverse 方法比 AbiK 提出的答案更简单。
library(purrr)
map_dbl(df, ~sum(is.na(.)))
注意:波浪号 (~) 创建一个匿名函数。和'。指匿名函数的输入,在本例中为 data.frame df。
【讨论】:
您可以使用它来计算每列中 NA 或空白的数量
colSums(is.na(data_set_name)|data_set_name == '')
【讨论】:
试试colSums函数
df <- data.frame(x = c(1,2,NA), y = rep(NA, 3))
colSums(is.na(df))
#x y
#1 3
【讨论】:
我从本地目录中读取了一个 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
【讨论】:
一种计算数据帧每列中空值数量的简洁方法:
library(tidyverse)
library(purrr)
df %>%
map_df(function(x) sum(is.na(x))) %>%
gather(feature, num_nulls) %>%
print(n = 100)
【讨论】:
df %>% summarise_all(funs(sum(is.na(.))))
df %>% map_df(~sum(is.na(.))) 或不使用 dplyr 作为map_df(~sum(is.na(df)))
用户 rrs 的答案是正确的,但这只会告诉您要传递的数据框特定列中的 NA 值的数量,以获取整个数据框的 NA 值的数量试试这个:
apply(<name of dataFrame>, 2<for getting column stats>, function(x) {sum(is.na(x))})
这就是诀窍
【讨论】:
apply(df, 2, function(x) sum(is.na(x)))
在summary() 输出中,该函数还计算NAs,因此如果想要多个变量中NAs 的总和,可以使用此函数。
【讨论】:
summary 输出在单个列上使用时是可用的,而它来自整个数据帧的输出是字符,如果以后需要它们,计数很难提取。见c(summary(mtcars))。
试试这个:
length(df$col[is.na(df$col)])
【讨论】:
这种形式,与 Kevin Ogoros 的形式略有不同:
na_count <-function (x) sapply(x, function(y) sum(is.na(y)))
返回 NA 计数作为命名的 int 数组
【讨论】:
na_count <-function (x) lapply(x, function(y) sum(is.na(y)))
如果您正在寻找数据框中每一列的 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
【讨论】:
na_count$name<-rownames(na_count)。
na_count <-sapply(x, function(y) sum(is.na(y))) 是一个较短的选择。
如果您想计算整个数据框中的 NA 数量,您也可以使用
sum(is.na(df))
【讨论】:
你想太多问题了:
sum(is.na(df$col))
【讨论】:
value 的数量时,除了NA 之外,正在编写一个布尔函数is.value,然后使用sum(is.value(df$col)) 是要走的路还是有更简洁的直接语法?
sum(df$col==value,na.rm=FALSE) 成功了。
na.rm=TRUE,否则如果df$col 包含NA,sum 将返回NA。