「.SD」機能についてdata.tableヘルプは、各グループの最初の行を選択する方法を示しています。data.table n-1列に限定された各グループの最初の行を選択しますか?
DT = data.table(x=rep(c("b","a","c"),each=3), v=c(1,1,1,2,2,1,1,2,2), y=c(1,3,6), a=1:9, b=9:1)
DT
DT[, .N, by=x] # number of rows in each group
これは主に私のためにうまく動作しますが、私が定義するすべての列を使用する場合、それが壊れます理由は分からないので、バグかどうか疑問に思います。例:
# Selecting by n-1 columns works:
DT[, .SD[1], by=c("x", "y", "v", "a")]
x y v a b
1: b 1 1 1 9
2: b 3 1 2 8
3: b 6 1 3 7
4: a 1 2 4 6
5: a 3 2 5 5
6: a 6 1 6 4
7: c 1 1 7 3
8: c 3 2 8 2
9: c 6 2 9 1
# The result of selecting by all columns is not what I expected:
DT[, .SD[1], by=c("x", "y", "v", "a", "b")]
Empty data.table (0 rows) of 5 cols: x,y,v,a,b
:そして、あなたの特定のケースのために、あなただけ
unique
を使用することができますし、by
列に基づいて、重複をドロップしますby
パラメータにgroup
変数を渡します:https://stackoverflow.com/questions/11792527/filtering-out-duplicated-non-unique-rows-in-data-tableしかし、これはバグであるならば、私はまだ思ったんだけど。 – zkurtz'.SD'は、列ごとにグループを除外したdata.tableのすべての列です。すべての列でグループ化すると、 '.SD'はそれ以上ありません。 – christoph
これらのケースを処理する関数を作成することもできます。fsd
akrun