如何获取另一列中相应条目的列中的几个条目的平均值具有相同的条目?
例如,我有一个大表,其中有3列,时间和价格为2.并且可以说在时间列下重复值。像10:30出现4次,然后我需要取相应价格列条目的平均值,并将其汇总到10:30的单行,只需一个价格。有人可以给我一些见解吗?
示例数据:
time prices size
10:00 23 1
10:15 12 3
10:30 12 1
10:30 19 4
10:45 12 1
我想修改第3行和第4行合并为一行,平均价格。
答案 0 :(得分:3)
像
这样的东西tapply(prices, time, mean)
要获得更完整的图片,请参阅?tapply
但您想对列size
做什么?
修改强>
要取价格的平均值和大小的最后一个值,这里有一个建议:
myDF<-data.frame(time=c("10:00","10:15","10:30","10:30","10:45"),
prices=c(23,12,12,19,12),size=c(1,3,1,4,1))
theRows <- tapply(seq_len(nrow(myDF)), myDF$time, function(x) {
return(data.frame(time = head(myDF[x, "time"],1), prices = mean(myDF[x, "prices"]),
size = tail(myDF[x, "size"], 1)))
}
)
Reduce(function(...) rbind(..., deparse.level = FALSE), theRows)
P.S。使用ddply
可以很好地完成这项工作 - 请参阅Paul的回答!
答案 1 :(得分:3)
您还可以查看plyr
包。我会使用ddply
:
ddply(df, .(time), summarise,
mean_price = mean(prices),
sum_size = sum(size))
这假设您的数据位于df
。有关plyr
的更详细说明,请查看统计软件期刊中的this paper。
其他替代方案包括使用data.table
或ave
。