gpt4 book ai didi

r - 使用 R 中的 data.table 按组生成所有 ID 对

转载 作者:行者123 更新时间:2023-12-05 08:42:53 25 4
gpt4 key购买 nike

我有一个 data.table,其中包含许多组中的许多个人(具有 ID)。在每个组中,我想找到 ids 的每个组合(每对个体)。我知道如何使用 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 尝试生成单列,而不是包含所有可能组合的两列:

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

关于r - 使用 R 中的 data.table 按组生成所有 ID 对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37333996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com