2012-04-17 82 views
1

如何获取列中相应条目中具有相同条目的列中几个条目的平均值?R表格修改

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

回答

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) 

附:这可以很好地使用ddply - 也见保罗的答案!

+0

非常感谢您对尺寸列的帮助,我希望它考虑最后一个条目..我希望它在这种情况下保留4。这就是它必须如何为所有人工作。 – Probabilityman 2012-04-17 14:15:46

3

你也可以看看plyr包。我会用ddply此:

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

这是假定你的数据是在df。有关plyr的更详细说明,请参阅统计软件期刊中的this paper

其他替代方案包括使用data.tableave

+0

谢谢你。我不太关注ddply的功能。如果我想合计大小列的内容,那么平均列出在各行中具有相同时间的条目的价格列。 – Probabilityman 2012-04-17 22:50:44

+0

我将我的代码扩展到包括大小列的总和,另外我添加了一个参考文献,很好地描述了plyr。 – 2012-04-18 07:24:54

+0

非常感谢@Paul Hiemstra – Probabilityman 2012-04-22 23:41:14