列のサブセットと の条件を指定して、data.table から一意の行を取得したいと思いますi
。それについて行く最善の方法は何ですか?(計算速度と短いまたは読みやすい構文の点で「最高」)
set.seed(1)
jk <- data.table(c1 = sample(letters,60,replace = TRUE),
c2 = sample(c(TRUE,FALSE),60, replace = TRUE),
c3 = sample(letters,60, replace = TRUE),
c4 = sample.int(10,60, replace = TRUE)
)
c1
とc2
が10の一意の組み合わせを見つけたいとしますc4
。それを行う方法はいくつか考えられますが、何が最適かはわかりません。抽出する列がキー付きかどうかも重要な場合があります。
## works but gives an extra column
jk[c4 >= 10, TRUE, keyby = list(c1,c2)]
## this removes extra column
jk[c4 >= 10, TRUE, keyby = list(c1,c2)][,V1 := NULL]
## this seems like it could work
## but no j-expression with a keyby throws an error
jk[c4 >= 10, , keyby = list(c1,c2)]
## using unique with .SD
jk[c4 >= 10, unique(.SD), .SDcols = c("c1","c2")]