【问题标题】:dplyr - Aggregation incorrect?dplyr - 聚合不正确?
【发布时间】:2014-04-13 10:35:45
【问题描述】:

我对 dplyr 有一些问题,并且 group_by 函数没有按预期工作。使用 summarise,我希望得到输入到 group_by 语句中的 id 和 year 的每个唯一组合的 var1 的平均值。

此代码应创建一个带有 id-year 观察值的 df,我想在其中汇总 id 和 year 的每个组合的 var 1 的平均值。但是,这并没有按预期工作,输出忽略 id,仅按年份汇总。

df <- data.frame(id=c(1,1,2,2,2,3,3,4,4,5),
                 year=c(2013,2013,2012,2013,2013,2013,2012,2012,2013,2013), 
                 var1=rnorm(10))

dplyr 代码:

dfagg <- df %.%
  group_by(id, year) %.%
  select(id, year, var1) %.%
  summarise(
    var1=mean(var1)
    )

结果:

> dfagg
Source: local data frame [8 x 2]
Groups: year

  year        var1
1 2013  0.22924025
2 2012 -0.93073687
3 2013 -0.82351583
4 2012  0.05656113
5 2013 -0.21622021
6 2012  1.91158209
7 2013 -2.67003628
8 2013 -0.72662276

知道发生了什么吗?

为了确保没有其他包中断 dplyr 函数,我尝试了以下相同的结果。

dfagg <- df %.%
  dplyr::group_by(id, year) %.%
  dplyr::select(id, year, var1) %.%
  dplyr::summarise(
    var1=mean(var1)
    )

【问题讨论】:

  • 我无法重现这个(dplyr 0.1.1)。你试过重启 R 吗?
  • 您需要将select() 放在group_by() 之前或summarize() 调用之后
  • @Troy,谢谢。这解决了这个问题。但是,我似乎不记得之前必须将 select() 放在 group_by() 之前。当只有一个 group_by 变量时,也许不需要它来工作?
  • @spesseh - 是的,它似乎回滚到最后一个分组变量 - 不确定该行为是否符合预期:可能是要报告的错误
  • 看起来像一个错误。我没有考虑到select()group_by() 的所有问题,所以仍然存在一些不良行为。你能在github.com/hadley/dplyr/issues提交一个错误吗?

标签: r aggregate dplyr


【解决方案1】:

我认为您不需要select() 行。只需使用 group_by()summarise() 就可以了。

library(dplyr)

df <- data.frame(id=c(1,1,2,2,2,3,3,4,4,5),
                 year=c(2013,2013,2012,2013,2013,2013,2012,2012,2013,2013), 
                 var1=rnorm(10))
df %>%
  group_by(id, year) %>%
  summarise(mean_var1=mean(var1)) -> dfagg

结果:

     id  year   mean_var1
  (dbl) (dbl)       (dbl)
1     1  2013 -1.20744511
2     2  2012 -0.59159641
3     2  2013 -0.03660552
4     3  2012 -0.38853566
5     3  2013 -1.76459495
6     4  2012 -0.66926387
7     4  2013  0.70451751
8     5  2013 -0.82762769

【讨论】:

    猜你喜欢
    • 2020-10-30
    • 1970-01-01
    • 2017-08-10
    • 2015-11-22
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多