2014-09-24 60 views
0

我希望能够检测并总结缺少的观察组。我试图使用aggregate,但无法使其工作。以下是一个示例数据集和所需结果。检测并总计NA的总和组

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 

谢谢你的任何建议。

+1

见的'aggreagte.formula'的 “na.action” 参数; '聚合(Z〜GROUP,my.data,函数(x)sum(is.na(x)),na.action = NULL)'。 – 2014-09-25 09:02:41

+0

@alexis_laz谢谢。如果您将其作为答案发布,我会接受它。 – 2014-09-25 12:00:08

回答

0

正当我准备按提交按钮我想尝试:

with(my.data, aggregate(Z, by = list(GROUP), FUN = function(x) any(is.na(x)))) 

with(my.data, aggregate(Z, by = list(GROUP), FUN = function(x) sum(is.na(x)))) 

这工作。虽然,我不知道为什么list方法有效,而~方法没有。

0
require(data.table) 
my.data = data.table(my.data) 
my.data[,list(Z,my.na = any(is.na(Z)), my.sum = sum(is.na(Z))),by="GROUP"] 

enter image description here

+0

当显示文本输出时,最好以文本形式显示输出,而不是通过图像显示。这有助于它在任何尺寸的浏览器上正确显示。 – 2014-09-24 18:51:39

+0

您还应该添加一些关于解决方案的解释以及它的工作原理。 – 2014-09-24 18:52:05