2013-07-16 59 views
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可以用來生成新列「狀態」作爲應用程序特定程序的一部分。似乎這將已經在那裏的某個地方。

+2

奇蹟般地瞭解您的具體數據的具體情況是,你有唯一工具。創建額外的,更有意義的列並使用'聚合'(或其他)。 – joran

回答

4

這不是直接的原因是你的數據結構不一致,所以你不能僅僅爲它建立一個庫。

您的state, region列基本上是一個索引列,並且您希望跨部分索引。 tapply就是爲此而設計的,但是沒有必要在這個特定場景中自動創建一個函數來自動完成它。你能做到這一點,而不之後創建雖然

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

索引列剛剛替換,列和一切,使索引列。

PS:你在你的例子有輕微錯字,你data.frame應

testset <- data.frame(regions,outcome) 
相關問題