为什么某些分组值会在aggregate()中丢失?

时间:2017-02-08 17:47:55

标签: r aggregate na

当我聚合如下所示的数据框时,我注意到某些聚合的列值会被删除

    set.seed(100)
    b <- data.frame(id=sample(1:3, 5, replace=TRUE),
         prop1=sample(c(TRUE,FALSE),5, replace = TRUE),
         prop2= sample(c(TRUE,FALSE,NA), 5, replace= TRUE))

    > b
      id prop1 prop2
    1  3 FALSE  TRUE
    2  1 FALSE    NA
    3  2 FALSE    NA
    4  2 FALSE FALSE
    5  3  TRUE  TRUE
    > aggregate(. ~ id, b, function(x) { length(x[x == TRUE])/length(x)})
      id prop1 prop2
    1  2   0.0     0
    2  3   0.5     1

id 1在这里发生了什么 - 为什么会掉线?

1 个答案:

答案 0 :(得分:0)

如果查看aggregate的帮助,您会看到有一个参数可指定如何处理缺失值:na.action。 经过一些试验,我找到了一个重现你问题的种子;)

set.seed(3)
b <- data.frame(id=sample(1:6, 10, replace=TRUE),
            prop1=sample(c(TRUE,FALSE),10, replace = TRUE),
            prop2= sample(c(TRUE,FALSE,NA), 10, replace= TRUE))
b

   id prop1 prop2
1   3  TRUE  TRUE
2   6  TRUE    NA
3   4 FALSE FALSE
4   4 FALSE  TRUE
5   4  TRUE    NA
6   3  TRUE    NA
7   2 FALSE FALSE
8   3  TRUE FALSE
9   3  TRUE  TRUE
10  4 FALSE FALSE

所以我们有这个id。

这应该做的事情:

aggregate(. ~ id, b, function(x) { sum(x,na.rm=TRUE)/length(x)}, na.action=NULL)

  id prop1 prop2
1  2  0.00  0.00
2  3  1.00  0.50
3  4  0.25  0.25
4  6  1.00  0.00