【发布时间】:2011-12-13 11:00:21
【问题描述】:
我想通过名为ensg 的标识符变量聚合data.frame。数据框如下所示:
chromosome probeset ensg symbol XXA_00 XXA_36 XXB_00
1 X 4938842 ENSMUSG00000000003 Pbsn 4.796123 4.737717 5.326664
我想计算具有相同ensg 值的行上每个数字列的平均值。这里的问题是我想保留其他身份变量染色体和符号不变,因为它们对于相同的ensg 也是相同的。
最后,我想要一个 data.frame 与标识列 chromosome、ensg、symbol 以及具有相同标识符的行上的数字列的平均值。我在ddply 中实现了这个,但是与aggregate 相比它非常慢:
spec.mean <- function(eset.piece)
{
cbind(eset.piece[1,-numeric.columns],t(colMeans(eset.piece[,numeric.columns])))
}
t
mean.eset <- ddply(eset.consensus.grand,.(ensg),spec.mean,.progress="tk")
我的第一个聚合实现如下所示,
mean.eset=aggregate(eset[,numeric.columns], by=list(eset$ensg), FUN=mean, na.rm=TRUE);
而且速度更快。但是aggregate 的问题是我必须重新附加描述变量。我还没有弄清楚如何将我的自定义函数与aggregate 一起使用,因为aggregate 不传递数据帧而只传递向量。
aggregate 有没有优雅的方法来做到这一点?或者有没有更快的方法来使用ddply?
【问题讨论】: