样本数据。我还不确定如何在 SO 上使用代码块系统。
df <- data.frame(c(1,1,1,2,2,2,3,3,3),c(1990,1991,1992,1990,1991,1992,1990,1991,1992),c(1,2,3,3,2,1,2,1,3))
colnames(df) <- c("id", "year", "value")
这会生成一个简单的矩阵。
id year value
1 1990 1
1 1991 2
1 1992 3
2 1990 3
2 1991 2
2 1992 1
3 1990 2
3 1991 1
3 1992 3
我正在整理 R 子集问题,但无法弄清楚应用于它的 ddply 函数 {plyr} 的第二步。
逻辑:对于所有ID子组,找出最早时间点的最大值(即3)。
我对在这里使用什么语法感到困惑。通过搜索 SO,我认为 ddply 是最佳选择,但无法弄清楚如何。理想情况下,我的输出应该是一个 UNIQUE ID 的向量(因为只选择了一个,整个行都带有它。这对我来说在 R 中不起作用,但它是我能想到的最好的“逻辑”。
ddply( (ddply(df,id)), year, which.min(value) )
例如
id year value
1 1992 3
2 1990 3
3 1992 3
如果 3 不可用,则应采用下一个最高值(2 或 1)。有任何想法吗?