私は下表dt
で始まり、リストkeys
によって、その列のサブセットをしようとしています:サブセットdata.table列独立
library(data.table)
set.seed(123)
randomchar <- function(n, w){
chararray <- replicate(w, sample(c(letters, LETTERS), n, replace = TRUE))
apply(chararray, 1, paste0, collapse = "")
}
dt <- data.table(x = randomchar(1000, 3),
y = randomchar(1000, 3),
z = randomchar(1000, 3),
key = c("x", "y", "z"))
keys <- with(dt, list(x = sample(x, 501),
y = sample(y, 500),
z = sample(z, 721)))
私はループを使って、私が望む結果を得ることができます。
desired <- copy(dt)
for(i in seq_along(keys)){
keyname <- names(keys)[i]
desired <- desired[get(keyname) %in% keys[[i]]]
}
desired
質問があります - このサブセットを行うためにもっとデータテーブルが慣れ親しんでいますか?
CJ
:dt[CJ(keys)]
を試しましたが、非常に時間がかかります。
それは何の 'paste'とフィルタですべての3つのキーを連結し、新たなフィールド' key'を作成する方法について? –
'do.call(CJ、keys)'を使うことを意味すると思います。 – Frank
@Frankおそらく - 私はそれを試して完了しましたが、どちらも長くかかり、望みの結果が得られません。 –