私は多くのグループに多くの個人(IDを持つ)を持つdata.tableを持っています。各グループ内では、すべてのIDの組み合わせ(すべての個人のペア)を検索したいと思います。私はsplit-apply-combineアプローチでこれを行う方法を知っていますが、私はdata.tableがより速くなることを望んでいます。すべてのIDペアを生成するgroup by data.table in R
サンプルデータ:
dat <- data.table(ids=1:20, groups=sample(x=c("A","B","C"), 20, replace=TRUE))
スプリット適用-combineメソッド:
:datS <- split(dat, f=dat$groups)
datSc <- lapply(datS, function(x){ as.data.table(t(combn(x$ids, 2)))})
rbindlist(datSc)
head(rbindlist(datSc))
V1 V2
1: 2 5
2: 2 10
3: 2 19
4: 5 10
5: 5 19
6: 10 19
私の最高data.table試みは、単一の列ではなく、すべての可能な組み合わせを持つ2つの列を作成します
dat[, combn(x=ids, m=2), by=groups]
ありがとうございます。