You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

data.table的:=与dplyr的mutate差异及高效分组连接实现问题

关于data.table实现同组人员关联列表的性能与结果一致性问题

示例数据

example <- data.table(
person_id = c("A1", "A1", "A1", "A1", "A2", "A2", "A3", "A3", "B1", "B1", "C1", "C1", "C2", "C2"),
year = c(2015, 2016, 2015, 2016, 2015, 2016, 2015, 2016, 2015, 2016, 2015, 2016, 2015, 2016),
group_id = c("abc", "abc", "cdz", "cdz", "abc", "abc", "ghe", "ghe", "abc", "fjx", "ghe", "ghe", "cdz", "cdz")
)

需求说明

为每个person_id生成特定年份下,与其同组的其他人员列表。

现有实现问题

当前使用dplyr的代码可实现需求,但在数十亿行的大数据集下运行极慢:

res <- example %>%
  group_by(year, group_id) %>%
  mutate(connections = list(person_id)) %>%
  group_by(year, person_id) %>%
  summarise(connections = toString(setdiff(unlist(connections), person_id)))

尝试改用性能更优的data.table分组代码,却无法得到与上述dplyr代码一致的结果,现提出两个问题:

  1. 两段代码结果不一致的原因是什么?
  2. 如何修改data.table代码使其与dplyr代码结果一致?或是否有更高效的实现方式?

注:使用R版本3.4.3,无法安装tidyverse。

内容的提问来源于stack exchange,提问作者sla813

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 17:47:36