2012-11-16 40 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

你有没有任何链接到相反的消息吗? –