假设有一个不同区域的数据集,每个区域都是一个状态的子集,以及一些结果变量:
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
可用于生成新列“状态”作为特定于应用程序的一部分。看起来像这样已经在某处了。
答案 0 :(得分:4)
这不是直截了当的原因是数据的结构不一致,因此您无法仅为其构建库。
您的state, region
列基本上是一个索引列,您希望对其中的一部分进行索引。 tapply
是为此而设计的,但是没有理由构建一个函数来自动执行此特定方案。您可以在不创建列的情况下执行此操作
tapply(outcome,gsub(",.*$","",testset$regions),sum)
索引列只是替换,
及其后的所有内容,而不是索引列。
PS:你的例子中有一个小错字,你的data.frame应该是
testset <- data.frame(regions,outcome)