我想计算使用group_by
后具有NA值的列数。
一直在问类似的问题,但是计算总NA而不是NA(group by counting non NA)列
数据:
Spes <- "Year Spec.1 Spec.2 Spec.3 Spec.4
1 2016 5 NA NA 5
2 2016 1 NA NA 6
3 2016 6 NA NA 4
4 2018 NA 5 5 9
5 2018 NA 4 7 3
6 2018 NA 5 2 1
7 2019 6 NA NA NA
8 2019 4 NA NA NA
9 2019 3 NA NA NA"
Data <- read.table(text=spes, header = TRUE)
Data$Year <- as.factor(Data$Year)
所需的输出:
2016 2
2018 1
2019 3
我已经尝试了几件事,这是我目前的最佳尝试。我很想寻求一种dplyr
解决方案。
> Data %>%
group_by(Year) %>%
summarise_each(colSums(is.na(Data, [2:5])))
Error: Can't create call to non-callable object
我没有太多运气就尝试过变化。非常感谢
答案 0 :(得分:1)
一个选择可能是group_by
Year
,检查每列中是否有any
NA
个值,然后为每个Year
计算它们的总和。 / p>
library(dplyr)
Data %>%
group_by(Year) %>%
summarise_all(~any(is.na(.))) %>%
mutate(output = rowSums(.[-1])) %>%
select(Year, output)
# A tibble: 3 x 2
# Year output
# <fct> <dbl>
#1 2016 2
#2 2018 1
#3 2019 3
使用aggregate
rowSums(aggregate(.~Year, Data, function(x)
any(is.na(x)), na.action = "na.pass")[-1], na.rm = TRUE)
#[1] 2 1 3