可能重复:
R分组功能:sapply vs. lapply与apply.vs. tapply vs. by vs. aggregate vs.
我正在使用R,并希望得到一些我正在遇到的问题的帮助:
我有一个df带有列ID和列Emotion 的dataframe().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)
Run Code Online (Sandbox Code Playgroud)
因此,手段的向量应如下所示: (4, 1, 8)
任何帮助将不胜感激!
Jil*_*ina 20
您可以使用 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
Run Code Online (Sandbox Code Playgroud)
sapply 也可能有用(这个其他解决方案会给你一个矢量)
sapply(split(df$Emotion, df$ID), mean)
1 2 3
4 1 8
Run Code Online (Sandbox Code Playgroud)
有很多方法可以做到这一点,包括ddply从plyr包,data.table包,其他的组合split和lapply,dcast从reshape2包.有关更多解决方案,请参阅此问
42-*_*42- 11
这正是这项工作的tapply目的.
tapply(df$ID , df$Emotion, mean)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34002 次 |
| 最近记录: |