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

使用data.table计算各ID首次出现指定Status的天数

高效实现方法(基于data.table)

针对你的需求,完全不需要嵌套循环,利用data.table的分组聚合特性就能高效完成。以下是两种简洁且性能优异的实现方式:

方法一:条件过滤后聚合+补全缺失值

# 定义目标状态
target_status <- 'C'

# 步骤1:筛选出目标状态的记录,按ID分组取最小day(首次出现的天数)
result <- DT[Status == target_status, .(first_day = min(day)), by = ID]
# 步骤2:补全所有ID,未出现目标状态的设为0
result <- DT[, .(ID = unique(ID))][result, on = .(ID)][is.na(first_day), first_day := 0]

# 查看结果
result

输出结果:

ID first_day
1:  1         0
2:  2         3
3:  3         4

方法二:分组内直接判断计算

target_status <- 'C'

result <- DT[, .(first_day = {
  # 提取当前ID下所有目标状态对应的day
  days <- day[Status == target_status]
  # 若存在则取最小值,否则返回0
  if (length(days) > 0) min(days) else 0
}), by = ID]

result

这个方法在分组内部直接完成判断和计算,代码更紧凑,同样高效。

性能优势说明

data.table的分组操作基于底层C语言优化实现,避免了R层面循环的额外开销,尤其是在处理大规模数据集时,性能比嵌套循环高出几个数量级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:50:29