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

如何在data.table中计算分组均值的跨组累积和并重复填充

用data.table计算跨日期的温度均值累积和并填充到对应行

问题描述

我有一组按半小时间隔采集的时间序列温度测量数据,为简化处理,将datetime变量用数值替代。已使用data.table按date分组计算出每日温度均值T_mean_daily,现需计算这些每日均值的跨组累积和,并像T_mean_daily一样,将每个date对应的累积和值重复填充到该date的所有datetime行中(非组内累积求和)。

示例数据生成代码:

library(data.table)
# 生成模拟数据
dt <- data.table(datetime = seq(1, 10.9, by = 0.1),
                 date = rep(1:10, each = 10),
                 T = floor(runif(100, 1, 10)))
# 计算每日温度均值
dt[, T_mean_daily := mean(T), by = date]

期望输出样式:

datetime   date T T_mean_daily T_sum
  1:      1.0    1 4          5.6   5.6
  2:      1.1    1 6          5.6   5.6
  ...
 11:      2.0    2 2          3.6   9.2
 12:      2.1    2 5          3.6   9.2
  ...

解决方案

方法一:分步实现

# 1. 提取每个date的唯一均值并计算跨日期累积和
cum_sum_dt <- dt[, .(T_mean_daily = first(T_mean_daily)), by = date][, T_sum := cumsum(T_mean_daily)]

# 2. 将累积和匹配回原数据表,自动填充对应date的所有行
dt <- dt[cum_sum_dt, on = .(date), T_sum := i.T_sum]

方法二:链式简洁写法

dt[, T_sum := {
  # 获取唯一的date-均值组合并计算累积和
  cum_vals <- unique(.SD[, .(date, T_mean_daily)])[, cumsum(T_mean_daily)]
  # 匹配每个date对应的累积和值
  cum_vals[match(date, unique(date))]
}, by = NULL]

代码说明

  • 两种方法核心逻辑一致:先获取每个date对应的唯一每日均值,计算其跨日期的累积和,再将累积和值匹配回原表的对应date行,实现批量填充。
  • 方法一通过独立生成累积和数据表再连接,逻辑清晰易读;方法二用链式操作在原表内完成计算,代码更紧凑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:45:24