2012-11-16 42 views
7

可能重複:
R Grouping functions: sapply vs. lapply vs. apply. vs. tapply vs. by vs. aggregate vs.計算列是指基於價值觀另一列

我使用R和喜歡一些幫助,我有一個問題:

我有一個數據幀(df)與列ID和列Emotion。 ID中的每個值都與Emotion中的40-300個值相對應(所以它不是一個設置的數字)。我需要爲ID中的每個j計算所有我在Emotion中的平均值。因此,這是該數據的樣子

df$ID = (1, 1, 1, 1, 2, 2, 3) 
df$Emotion = (2, 4, 6, 4, 1, 1, 8) 

這樣的手段的載體應該是這樣的:(4, 1, 8)

任何幫助將不勝感激!

+4

-1從我不首先搜索。當你發佈這個問題時,S.O.會給你提供很多可能的答案。你一定忽略了這個,並且發佈了這個問題,user1830937。 –

+6

相反,我搜索了很長很長時間(雖然我是新手搜索,所以也許我沒有適當地使用搜索詞)。我無法像答案提供的那樣清晰直接地找到任何東西,所以我很高興我問了這個問題。 –

+1

而你的可能重複的建議被埋在我還不熟悉的很多行話中。但我在學習! –

回答

16

您可以使用aggregate

ID = c(1, 1, 1, 1, 2, 2, 3) 
Emotion = c(2, 4, 6, 4, 1, 1, 8) 
df <- data.frame(ID, Emotion) 


aggregate(.~ID, data=df, mean) 
    ID Emotion 
1 1  4 
2 2  1 
3 3  8 

sapply也可以有用的(這個其他的解決方案會給你一個向量)

sapply(split(df$Emotion, df$ID), mean) 
1 2 3 
4 1 8 

有很多的方法可以做到這一點,包括ddply從plyr包,data.table包,splitlapply,dcast的其他組合來自reshape2包。有關更多解決方案,請參閱this question

+1

你也是。我們之前見過多少次?所以。不是幫助臺。通過回答,而不是投票結束重複,你會降低S.O.進入幫助臺。 –

+5

我經常做的事是接近投票並提供一個快速的答案。這樣,如果有人絆倒了它,這個問題就會有一些價值。另外,有人回答這個問題可能不會影響它再次發生的可能性。如果問題被認爲是重複的,則SO系統可以進行清理。我同意你的信息,但反對低調做出與你不同的選擇的人。 –

+0

@PaulHiemstra複製鏈接中的信息的價值在哪裏?是否有人回答_這個問題可能不會影響_this_問題是否會再次被問到,因爲它會給人的印象是,一般地詢問(並且確實回答)重複的問題是可以的。正如DWin所表明的那樣;他在評論中同樣表示。關於選擇,如果S.O.那麼這將是公平的。是一個民主國家。但事實並非如此。他們的規則/指導,而不是我的:[做你的家庭作業](http://stackoverflow.com/questions/how-to-ask)。 –

9

這正是tapply被設計來完成的工作。

tapply(df$ID , df$Emotion, mean) 
+0

-1 from my DWin。這是可以想象的最簡單的問題之一。通過不投票結束重複,你似乎正在轉向S.O.進入幫助臺。 –

+1

我想管理員給我們的信息。向主持人轉介事項並刪除家庭作業標記會受到處罰。我會和你一起投票結束,但是還有其他一些關於重複的問題,並且界面似乎不是用來鼓勵標記它們的工作。相反的消息是我所得到的。 –

+0

你有沒有任何鏈接到相反的消息嗎? –