【发布时间】:2014-09-25 02:25:49
【问题描述】:
我希望按组检测和总结缺失的观察结果。我尝试使用aggregate,但无法让它工作。下面是一个示例数据集和所需的结果。
my.data = read.table(text = "
GROUP Z
1 NA
1 NA
1 NA
2 A
2 NA
2 NA
2 A
3 A
3 A
3 NA
", header = TRUE, stringsAsFactors = FALSE, na.strings = "NA")
my.data
desired.result <- read.table(text = "
GROUP Z my.na my.sum
1 <NA> TRUE 3
1 <NA> TRUE 3
1 <NA> TRUE 3
2 A TRUE 2
2 <NA> TRUE 2
2 <NA> TRUE 2
2 A TRUE 2
3 A TRUE 1
3 A TRUE 1
3 <NA> TRUE 1
", header = TRUE, stringsAsFactors = FALSE, na.strings = "NA")
这是我使用的代码:
my.na <- aggregate(my.data$Z ~ my.data$GROUP, FUN = function(x) any(is.na(x)))
colnames(my.na) <- c('GROUP', 'my.na')
my.sum <- aggregate(my.data$Z ~ my.data$GROUP, FUN = function(x) sum(is.na(x)))
colnames(my.sum) <- c('GROUP', 'my.sum')
my.data2 <- merge(my.data , my.na , by=c('GROUP'), all=TRUE)
my.data2 <- merge(my.data2, my.sum, by=c('GROUP'), all=TRUE)
my.data2
以上函数在aggregate之外工作,如下图:
x <- c(NA, 1, 3, NA, NA)
sum(is.na(x))
# [1] 3
any(is.na(x))
# [1] TRUE
感谢您的建议。
【问题讨论】:
-
查看
aggreagte.formula的“na.action”参数;aggregate(Z ~ GROUP, my.data, function(x) sum(is.na(x)), na.action = NULL). -
@alexis_laz 谢谢。如果您将其发布为答案,我会接受。