Ich habe eine data.table mit vielen Individuen (mit ids) in vielen Gruppen. Innerhalb jeder Gruppe möchte ich jede Kombination von IDs (jedes Paar von Individuen) finden. Ich weiß, wie man das mit einem Split-Apply-Combine-Ansatz macht, aber ich hoffe, dass eine data.table schneller wäre.Erzeuge alle ID-Paare, nach Gruppe mit data.table in R
Beispieldaten:
dat <- data.table(ids=1:20, groups=sample(x=c("A","B","C"), 20, replace=TRUE))
Split-Apply-Combine-Methode:
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
Mein bester data.table Versuch erzeugt eine einzige Säule, nicht zwei Spalten mit allen möglichen Kombinationen:
dat[, combn(x=ids, m=2), by=groups]
Vielen Dank im Voraus.