簡體   English   中英

在R中通過data.table按組生成所有ID對

[英]Generate All ID Pairs, by group with data.table in R

我有一個data.table,其中有許多個人(具有ID)在許多組中。 在每個組中,我想找到id的每種組合(每對個體)。 我知道如何使用拆分應用組合方法來執行此操作,但是我希望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嘗試會產生一列,而不是包含所有可能組合的兩列:

dat[, combn(x=ids, m=2), by=groups]

提前致謝。

您需要將作為矩陣的t(combn())的結果轉換為data.tabledata.frame ,因此這應該起作用:

library(data.table)  
set.seed(10)
dat <- data.table(ids=1:20, groups=sample(x=c("A","B","C"), 20, replace=TRUE))
dt <- dat[, as.data.table(t(combn(ids, 2))), .(groups)]
head(dt)
   groups V1 V2
1:      C  1  3
2:      C  1  5
3:      C  1  7
4:      C  1 10
5:      C  1 13
6:      C  1 14
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))

然后,您可以將列表更改為您可能需要的任何其他類型的格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM