【问题标题】:Aggregate data in one data.frame by groupings in another通过在另一个 data.frame 中分组来聚合一个 data.frame 中的数据
【发布时间】:2016-05-11 17:10:21
【问题描述】:

我有一个大的 data.frame,我想通过另一个分类变量的分组来聚合它。一种方法是:

cars = mtcars
carb_grps = data.frame(carb = 1:8, carb_grp = rep(c('Low','Mid','High'), c(2,2,4)))
cars = merge(cars, carb_grps, by = 'carb')
aggregate(mpg ~ carb_grp, cars, mean)
  carb_grp      mpg
1     High 17.35000
2      Low 23.61176
3      Mid 15.90769

但这会复制大型 data.table 中的所有 carb_grp 详细信息,我猜这会占用更多内存?我想知道 R 中是否有更优雅/更有效的方式来实现这一目标?

【问题讨论】:

    标签: r


    【解决方案1】:

    我认为这是一个很好的方法。这是 dplyr 的等价物。

    library(dplyr)
    
    data_frame(carb = 1:8, 
               carb_grp = rep(c('Low','Mid','High'), 
                              c(2,2,4) ) ) %>%
      right_join(mtcars) %>%
      group_by(carb_grp) %>%
      summarize(mpg = mean(mpg) )
    

    【讨论】:

    • 谢谢。最好使用 dplyr 解决方案,我喜欢这个例子。但我确实注意到这与我的方法基本相同,因为 carb_grp 数据是为每个数据行复制的。你知道 R 是如何在后台处理这个列的吗?会例如carbcarb_grp 列需要是 factor 类来优化内存吗?
    • @geotheory 因素在相对于字符向量的内存存储方面并不是更有效,因为字符向量存储在哈希中(某种魔法)。从 R 2.8 左右开始就是这样。有关详细信息,请参阅此 post 和其中的链接。
    • @lmo 这很令人困惑,因为 factor 确实会影响 object.size 返回的值(请参阅问题的附录)。我确实注意到该函数提供了“估计”..
    • 阅读该哈希文档 - 我猜 object.size 一定是错误的,尽管它为什么不反映 R 的新量子力学很奇怪..
    • @geotheory 是的,我对内部的了解还不够,无法给出合理的答案,我只是拖着公司线。
    猜你喜欢
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多