多くのグループに多くの個人 (ID を持つ) を持つ data.table があります。各グループ内で、ID のすべての組み合わせ (個人のすべてのペア) を見つけたいと考えています。split-apply-combine アプローチでこれを行う方法は知っていますが、data.table の方が高速であることを期待しています。
サンプルデータ:
dat <- data.table(ids=1:20, groups=sample(x=c("A","B","C"), 20, replace=TRUE))
分割適用結合方式:
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 つの列ではなく、1 つの列を生成します。
dat[, combn(x=ids, m=2), by=groups]
前もって感謝します。