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

如何在R中按日期分组聚合dataframe列值 实现单日一行的数据集结构

R语言按日期分组聚合数值列求和方案

你可以根据自己的使用习惯选择以下任意一种实现方式:

  • dplyr包实现(最常用,易读性高)
    首先确保已安装dplyr包,执行以下代码:
# 安装包(仅首次使用需要执行)
install.packages("dplyr")
# 加载包
library(dplyr)

df_agg <- df %>%
  # 按日期及同日期取值唯一的非数值列分组
  group_by(date1, Id, Week, DTPE) %>%
  # 对所有数值列做求和聚合
  summarise(across(where(is.numeric), sum), .groups = "drop")
  • 基础R实现(无需安装额外依赖包)
df_agg <- do.call(rbind, lapply(split(df, df$date1), function(sub_df){
  # 非数值列取该分组第一行值(同日期下值一致)
  non_num_cols <- sub_df[1, !sapply(sub_df, is.numeric), drop = FALSE]
  # 数值列按列求和
  num_cols_sum <- t(colSums(sub_df[, sapply(sub_df, is.numeric), drop = FALSE]))
  # 合并两部分结果
  cbind(non_num_cols, as.data.frame(num_cols_sum))
}))
# 重置行号
rownames(df_agg) <- NULL
  • data.table包实现(适合处理超大数据量,性能更高)
# 安装包(仅首次使用需要执行)
install.packages("data.table")
# 加载包
library(data.table)
# 转换为data.table格式
setDT(df)
# 分组聚合
df_agg <- df[, lapply(.SD, function(col) {
  if(is.numeric(col)) sum(col) else col[1]
}), by = .(date1, Id, Week, DTPE)]

结果验证

你可以直接查看聚合后的结果,以2021-07-01为例,聚合后该行数值列均为原4行数据的求和值:

> df_agg[df_agg$date1 == "2021-07-01", ]
       date1 Id     Week DTPE D1 DR01 DR02 DR03 DR04 DR05
7 2021-07-01  1 Thursday   Ho 21   12   16   19   22   21

如果你的实际数据中同日期下Week/DTPE存在不同取值,只需调整分组字段,仅保留date1作为分组依据,非数值列可根据需求调整取值逻辑(比如取众数、取第一个有效值等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:48:00