サンプルデータ。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} の 2 番目のステップを理解できませんでした。
ロジック: すべての ID サブグループについて、最も早い時点での最大値 (3) を見つけます。
ここでどの構文を使用するかについて混乱しています。SOを検索すると、ddplyが最良の選択だと思いますが、方法がわかりません。理想的には、出力は UNIQUE ID のベクトルである必要があります (1 つだけが選択され、行全体が取得されるためです。これは R では機能しませんが、思いつくことができる最高の「ロジック」です。
ddply( (ddply(df,id)), year, which.min(value) )
例えば
id year value
1 1992 3
2 1990 3
3 1992 3
3 が使用できない場合は、次に高い値 (2 または 1) を取得する必要があります。何か案は?