11

可能重复:
R 分组函数:sapply vs. lapply vs. apply。vs. tapply vs. by vs. aggregate vs.

我正在使用 R 并且希望对我遇到的问题有所帮助:

我有一个df带有列 ID 和列 Emotion 的数据框 ( )。ID 中的每个值对应于 Emotion 中的 40-300 个值(所以它不是一个固定的数字)。我需要计算Emotion每个 j in的所有 i 的平均值ID。所以这就是数据的样子

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

因此均值向量应如下所示:(4, 1, 8)

任何帮助将不胜感激!

4

2 回答 2

22

您可以使用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 

有很多方法可以做到这一点,包括ddplyplyr 包、data.table 包、和的其他组合,split来自reshape2 包。请参阅此问题以获取更多解决方案。lapplydcast

于 2012-11-16T22:31:34.737 回答
10

这正是这项工作tapply的设计目的。

tapply(df$ID , df$Emotion, mean) 
于 2012-11-16T23:51:40.250 回答