2

多くのグループに多くの個人 (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]

前もって感謝します。

4

2 に答える 2

1
library(data.table)  
dat <- data.table(ids=1:20, groups=sample(x=c("A","B","C"), 20, replace=TRUE))
ind<-unique(dat$groups)
lapply(1:length(ind), function (i) combn(dat$ids[which(dat$groups==ind[i])],2))

その後、リストを必要な他の形式に変更できます。

于 2016-05-19T21:21:05.567 に答える