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

如何为data.table中的每个组生成唯一数字并统计?

基于data.table的三个需求实现方案

先给出原始数据供参考:

library(data.table)

group <- c("a", "a", "a", "b", "b")
start <- c(3, 5, 15, 22, 25)
end <- c(9, 11, 20, 23, 30)

dt <- data.table(group, start, end)

(i) 新增列存储每行start到end的所有数字

利用data.table支持列表列的特性,直接生成每行的整数序列:

dt[, numbers := lapply(seq_along(start), function(i) seq(start[i], end[i]))]

执行后numbers列的每个元素为对应行start到end的完整整数序列,比如第一行对应c(3,4,5,6,7,8,9)。

(ii) 按group分组添加组内唯一数字列

按分组聚合所有行的序列,去重后生成组级唯一数字列表并关联回原表:

dt[, unique_numbers_per_group := list(unique(unlist(Map(seq, start, end)))), by = group]

Map(seq, start, end)生成组内所有行的序列集合,经unlist展开、unique去重后,用list包裹为列表列,确保同组所有行共享同一组唯一数字序列。

(iii) 统计每组唯一数字的数量

基于(ii)的结果,直接计算组内唯一数字的总个数:

dt[, count_unique_numbers := length(unlist(unique_numbers_per_group)), by = group]

执行后同组所有行都会显示该组唯一数字的总数量,比如分组a的结果为15。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:42:41