我知道R中的以下语法将通过变量给出NAs的计数。我如何通过分组变量对此进行分层?
na_count <-sapply(x, function(y) sum(length(which(is.na(y)))))
答案 0 :(得分:4)
我们可以使用aggregate
aggregate(.~grp, data=dat, FUN= function(x) sum(is.na(x)))
或dplyr
library(dplyr)
dat %>%
group_by(grp) %>%
summarise_each(funs(sum(is.na(.)))
或使用data.table
library(data.table)
setDT(dat)[, lapply(.SD, function(x) sum(is.na(x))), grp]
或者正如@David Arenburg在评论中提到的那样,rowsum
是另一种选择,我们可以在总结时按操作进行分组。我们使用+
将逻辑矩阵(is.na(dat)
)强制转换为二进制,因为该函数不适用于逻辑类。
rowsum(+(is.na(dat)), dat$grp)