1

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

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

4

2 回答 2

3

你也可以看看plyr包裹。我会用ddply这个:

ddply(df, .(time), summarise, 
   mean_price = mean(prices),
   sum_size = sum(size))

这假设您的数据位于df. 如需更详细的描述plyr,请查看Journal of Statistical Software 中的这篇论文

其他替代方法包括使用data.table, 或ave

于 2012-04-17T13:16:51.433 回答
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)

ps 这可以很好地使用ddply- 也可以参见 Paul 的回答!

于 2012-04-17T12:44:57.967 回答