R表修改

时间:2012-04-17 12:40:42

标签: r plyr data.table

如何获取另一列中相应条目的列中的几个条目的平均值具有相同的条目?

例如,我有一个大表,其中有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行合并为一行,平均价格。

2 个答案:

答案 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.tableave