2012-01-04 56 views
0

如果這是一個問題,但我在論壇 找不到方法來搜索我正在嘗試做什麼,我先進道歉。 我有一個訓練集,我試圖找到一種方法來減少我的分類變量的級別數 (在下面的示例中,類別是狀態)。我想將狀態映射到關卡的平均值或速率。 我的訓練集會是什麼樣一旦輸入以下到一個數據幀:根據變量創建聚合列與R

state class mean 
1  CA  1 0 
2  AZ  1 0 
3  NY  0 0 
4  CA  0 0 
5  NY  0 0 
6  AZ  0 0 
7  AZ  1 0 
8  AZ  0 0 
9  CA  0 0 
10  VA  1 0 

我想在我的數據幀中的第三列是第一列基於類變量(州)的平均值。所以CA行的平均值將是0.333 ... ,這樣平均值列可以用作狀態列的替代值 有沒有在R中編寫顯式循環的情況下執行此操作的一些好方法?

如果我的訓練集沒有包含它們,我們如何繪製新的關卡(例如新的狀態)?任何鏈接到R的方法將不勝感激。

回答

2

這真的是ave函數的設計目的。它真的可以使用類別來構建任何功能的結果,但其默認功能可按平均是因此而得名,即ave-(憤怒):

dfrm$mean <- with(dfrm, ave(class, state)) #FUN=mean is the default "setting" 
+0

我接受了這個答案,因爲它不需要我使用外部包。你能否在你的回答中反轉州和班?例如:with(dfrm,ave(class,state)) – ak3nat0n 2012-01-07 01:11:36

1
library(plyr) 
    join(data,ddply(data,.(state),summarise,mean=mean(class)),by=("state"),type="left") 
+0

我認爲它可能是簡單的只使用'ddply'和'轉換'(如果我已經正確理解了OP)。 – joran 2012-01-04 23:44:16

+0

其實我只是做了一個總結,但將它匹配回原始數據。我懷疑ddply語句本身是足夠的,但OP可能將其作爲原始數據的一部分。 – Maiasaura 2012-01-05 02:17:18