【问题标题】:What's the smart way to aggregate data?聚合数据的聪明方法是什么?
【发布时间】:2013-07-16 21:38:36
【问题描述】:

假设有一个不同区域的数据集,每个区域是一个状态的子集,以及一些结果变量:

regions <- c("Michigan, Eastern",
    "Michigan, Western",
    "Minnesota",
    "Mississippi, Northern",
    "Mississippi, Southern",
    "Missouri, Eastern",
    "Missouri, Western")

set.seed(123)
outcome <- rpois(7, 12)
testset <- data.frame(regions,outcome)

                 regions outcome
1     Michigan, Eastern      10
2     Michigan, Western      11
3             Minnesota      17
4 Mississippi, Northern      12
5 Mississippi, Southern      12
6     Missouri, Eastern      17
7     Missouri, Western      13

一个有用的工具会聚合每个区域,并按区域添加或取平均值或最大值等,并为状态生成一个新的数据框。例如,总和会输出:

                state    outcome
1             Michigan       21
3             Minnesota      17
4             Mississippi    24
6             Missouri       30

aggregate() 函数不能解决这个问题。 R中是否还有其他为此而构建的东西?似乎grep 可用于生成新列“状态”作为应用程序特定程序的一部分。似乎这已经在某个地方了。

【问题讨论】:

  • 只有您自己才能神奇地了解您的特定数据的细节。创建其他更有意义的列并使用aggregate(或其他)。

标签: r regex aggregate


【解决方案1】:

这不是直截了当的原因是你的数据结构不一致,所以你不能简单地为它构建一个库。

您的state, region 列基本上是一个索引列,并且您希望对其中的一部分进行索引。 tapply 就是为此而设计的,但是没有理由构建一个函数来针对这种特定情况自动执行此操作。你可以在不创建列的情况下做到这一点

tapply(outcome,gsub(",.*$","",testset$regions),sum)

索引列只是替换了, 和它之后的所有内容,留下索引列。

PS:您的示例中有一个小错误,您的 data.frame 应该是

testset <- data.frame(regions,outcome)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-19
    • 2021-09-22
    • 2013-02-13
    • 1970-01-01
    • 2018-06-22
    • 2016-06-10
    • 1970-01-01
    • 2016-07-30
    相关资源
    最近更新 更多