汇总数据的智能方法是什么?

时间:2013-07-16 21:38:36

标签: r grep aggregate

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

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可用于生成新列“状态”作为特定于应用程序的一部分。看起来像这样已经在某处了。

1 个答案:

答案 0 :(得分:4)

这不是直截了当的原因是数据的结构不一致,因此您无法仅为其构建库。

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

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

索引列只是替换,及其后的所有内容,而不是索引列。

PS:你的例子中有一个小错字,你的data.frame应该是

testset <- data.frame(regions,outcome)