特定の列に同じ値を持つ行の各グループから 1 行を除くすべての行を削除して、データ フレームを折りたたもうとしています。つまり、各グループの最初の行です。
たとえば、これを変換したい
> d = data.frame(x=c(1,1,2,4),y=c(10,11,12,13),z=c(20,19,18,17))
> d
x y z
1 1 10 20
2 1 11 19
3 2 12 18
4 4 13 17
これに:
x y z
1 1 11 19
2 2 12 18
3 4 13 17
現在これを行うために集計を使用していますが、データが増えるとパフォーマンスが許容できなくなります。
> d.ordered = d[order(-d$y),]
> aggregate(d.ordered,by=list(key=d.ordered$x),FUN=function(x){x[1]})
ここと同じ関数引数で分割/非分割を試みましたが、非分割は行番号の重複について不平を言います。
可能性はありますか?rleの長さベクトルを各実行を開始する行のインデックスに変換するRイディオムはありますか?それを使用して、データフレームからそれらの行を取り出すことができますか?