通过ddply确定哪个元素是最大值

时间:2012-04-19 21:09:08

标签: r plyr

我有一个包含ID变量,时间点和响应值的数据框。我正在使用一些使用ddply来计算每个ID变量的最大平均值的旧代码(即每组中响应最高的时间点):

grp <- rep(c("a", "b"), each=6)
t <- rep(1:2, each=3, len=12)
y <- rnorm(length(t))
df <- data.frame(grp=factor(grp), t=t, y=y)
meanY <- ddply(df, .(grp, t), function(x) mean(x$y))
maxMeanY <- ddply(meanY, .(grp), function(x) max(x$V1))

我现在已经决定,我还想知道每个最大平均值的时间值:

maxTimes
>   grp  t V1
 1    a  2 0.0534
 2    b  1 0.6015

即告诉我,对于a组,t2的平均值最高,但对于b组,t1的平均值最高。

最简单的方法是什么?

2 个答案:

答案 0 :(得分:4)

ddply(meanY, .(grp), summarise, max=max(V1), where=t[which.max(V1)])

答案 1 :(得分:3)

我认为这可能会给你你想要的东西,但可能有一个更好的方式:

maxMeanY <- ddply(meanY, .(grp), function(x)c( max(x$V1), x[which.max(x$V1), 2]))