【发布时间】:2021-03-25 17:26:23
【问题描述】:
在 tidyverse(dplyr) 中有类似的东西:
colSums(is.na(airquality))?
换句话说,我怎样才能有一个数据框,其中一行总结了每列中NA 值的数量?
我虽然即将使用摘要。但是我该怎么做呢?
有什么帮助吗?
谢谢
【问题讨论】:
在 tidyverse(dplyr) 中有类似的东西:
colSums(is.na(airquality))?
换句话说,我怎样才能有一个数据框,其中一行总结了每列中NA 值的数量?
我虽然即将使用摘要。但是我该怎么做呢?
有什么帮助吗?
谢谢
【问题讨论】:
您可以汇总所有列,例如计算NA的数量:
library(haven)
temp <- tempfile()
download.file("https://www.diw.de/documents/dokumentenarchiv/17/diw_01.c.412698.de/soep_lebensz_en.zip",temp)
soep <- read_dta(unz(temp, "soep_lebensz_en.dta"))
unlink(temp)
colSums(is.na(soep))
id year sex education no_kids health_org satisf_org health_std satisf_std
0 0 0 1468 906 15 0 15 0
library(tidyverse)
soep %>%
summarise(across(everything(), ~ sum(is.na(.))))
# A tibble: 1 x 9
id year sex education no_kids health_org satisf_org health_std satisf_std
<int> <int> <int> <int> <int> <int> <int> <int> <int>
1 0 0 0 1468 906 15 0 15 0
【讨论】:
dplyr 等效于 colSums 是 summarize(across(everything(), sum))。我们可以像这样添加is.na:
summarize(across(everything(), ~ sum(is.na(.))))
这将返回一个数据帧,并且可以很好地与group_by 配合使用,这可能会很好。
【讨论】:
你可以试试这个:
library(tidyverse)
airquality %>%
map_dbl(~sum(is.na(.)))
或者按照 Thomas 在 cmets 中的建议
airquality %>% is.na %>% map_dbl(sum)
【讨论】: