【问题标题】:detect and sum NA's by group with aggregate用聚合检测并按组求和 NA
【发布时间】: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 谢谢。如果您将其发布为答案,我会接受。

标签: r aggregate


【解决方案1】:

就在我准备按下提交按钮时,我想尝试一下:

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 方法有效而 ~ 方法无效。

【讨论】:

    【解决方案2】:
    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"]
    

    【讨论】:

    • 当显示文本输出时,最好以文本形式而不是通过图像显示输出。这有助于它在任何大小的浏览器上正确显示。
    • 您还应该添加一些关于您的解决方案及其工作原理的说明。
    猜你喜欢
    • 2015-11-19
    • 1970-01-01
    • 2021-01-29
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 2022-12-22
    • 2019-12-17
    • 1970-01-01
    相关资源
    最近更新 更多