0

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

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可以用来生成新列“状态”作为应用程序特定程序的一部分。似乎这已经在某个地方了。

4

1 回答 1

4

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

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

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

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

PS:您的示例中有一个轻微的错字,您的 data.frame 应该是

testset <- data.frame(regions,outcome)
于 2013-07-16T21:47:13.927 回答