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

如何一步聚合data table:按日期分组,数值列取均值其余列取首值

用data.table按日期分组聚合的解决方案

嘿,这个需求用data.table来实现超简洁的,刚好匹配你要的效果!我直接给你上代码和解释:

首先,先把你给的示例数据转换成data.table格式(如果还没转的话):

library(data.table)

# 构造你的示例数据
my_table <- data.table(
  name = c("test", "test", "test", "test"),
  date = as.POSIXct(c("2018-04-04", "2018-04-04", "2018-04-05", "2018-04-06")),
  value = c(1, 2, 8, 3)
)

接下来就是核心的聚合操作了,按date分组,对value取均值,name取每组的第一个值:

# 执行分组聚合
aggregated_table <- my_table[, .(
  name = first(name),  # 提取每组的第一个name值
  value = mean(value)  # 计算每组value的平均值
), by = .(date)]  # 分组依据是date列

这里解释下:因为我们是按date分组,所以date列在结果里会自动保留每个分组的唯一日期值,不用额外处理;first()函数专门用来取分组内的第一个元素,完美适配你的字符列需求;mean()就是常规的均值计算啦。

运行完后,你要的结果就出来了:

print(aggregated_table)
#        name       date value
# 1:   test 2018-04-04   1.5
# 2:   test 2018-04-05   8.0
# 3:   test 2018-04-06   3.0

要是你的表有多个字符列或数值列,也可以批量处理,不用一个个写:
比如如果还有字符列category和数值列score,可以这么写:

# 批量处理多列的情况
multi_col_result <- my_table[, c(
  # 对所有目标字符列取第一个值
  lapply(.SD[, .(name, category), with = FALSE], first),
  # 对所有目标数值列取均值
  lapply(.SD[, .(value, score), with = FALSE], mean)
), by = .(date)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:42:44