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

如何用R data.table按连续相同值分组并聚合数据?

解决data.table按连续相同值分组并聚合的问题

要实现按a列连续相同值分组,提取每组b的最小值(即第一个值)和c的最大值(即最后一个值),可以借助data.table的rleid()函数生成连续分组标识,再进行聚合操作,具体步骤如下:

代码实现

library(data.table)

# 构造原始数据
dt <- data.table(
  a = c(1,1,1,2,2,2,2,1,1,2),
  b = seq(1:10),
  c = seq(1:10)+1
)

# 生成连续分组ID:同一连续值段对应唯一ID
dt[, group_id := rleid(a)]

# 按a和分组ID聚合,提取目标值
result <- dt[, .(b = min(b), c = max(c)), by = .(a, group_id)]

# 移除临时分组ID列(可选)
result[, group_id := NULL]

# 查看结果
print(result)

结果输出

a  b  c
1: 1  1  4
2: 2  4  8
3: 1  8 10
4: 2 10 11

关键说明

  • rleid(a):该函数会为a列中连续的相同值生成唯一的分组ID,自动区分非连续的相同值(比如第1-3行的1和第8-9行的1会被分为不同组)。
  • 聚合逻辑:因为原始数据中b和c都是递增序列,所以min(b)等价于取每组的第一个b值,max(c)等价于取每组的最后一个c值;如果序列不是递增的,可以改用first(b)和last(c)来直接提取首尾值,效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:01:21