2014-04-07 58 views
2

這裏是我的數據:如何獲得平均每個組中的數據幀

v  x 
    0:0  96 
    0:0  119 
    0:0  108 
    1:0  73 
    1:0  65 
    2:0  83 
    2:0  73 
    2:0  23 

我怎樣才能獲得平均爲V即x的平均值組對所有0:0,1:0等

我的失敗嘗試:

df = read.csv(input.file.path, header=TRUE) 
df$v <- as.factor(df$v) 
ave(df$x, df$v) 
+0

當你嘗試這樣發生了什麼?你收到錯誤信息了嗎? –

+0

'ave(df $ x,df $ v)'對我來說可以正常工作,它給出'107.66667 107.66667 107.66667 69.00000 69.00000 59.66667 59.66667 59.66667'作爲結果 –

回答

5

ave是不是在這裏最好的選擇。它會返回一個與你的輸入相同長度的向量,而我猜你希望將結果集中到一個更緊湊的表中。

如果是這樣的情況下,嘗試aggregatetapply代替:

> aggregate(x ~ v, df, mean) 
    v   x 
1 0:0 107.66667 
2 1:0 69.00000 
3 2:0 59.66667 

> tapply(df$x, df$v, mean) 
     0:0  1:0  2:0 
107.66667 69.00000 59.66667 
+1

或'by()',它是'tapply() ,並且我個人覺得在代碼中更容易閱讀:通過* groups計算*。 –

+0

要像這樣看到它,讓我的心在數小時的嘗試後沉入水中。它工作完美。我後來將v分成兩列並使用:df < - aggregate(x〜v1 + v2,df,mean)。謝謝你的幫助。 –

+1

@PhloxMidas,不要讓你的心沉入其中! R中有許多真正的*分組函數,無論是在基本R還是可用的許多軟件包中,在您開始深入研究每個特性之前,有時很難有時打到您真正需要的那一個。 – A5C1D2H2I1M1N2O1R2T1

相關問題