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

如何用R语言tidyverse按唯一ID合并交易数据保留首尾日期

用tidyverse合并重复记录的实现方案

步骤说明

基于你的需求,我们可以通过tidyverse的分组+汇总操作实现:按ID和Transaction #分组后,保留每组第一条的Process #、组内最早的Start Date和最晚的End Date。

示例代码

首先加载依赖包并构造测试数据:

library(tidyverse)

# 构造测试数据(模拟你的输入格式)
df <- tibble(
  ID = c("ID1", "ID1", "ID1", "ID1", "ID2", "ID2"),
  `Transaction #` = c("ID1_T1", "ID1_T1", "ID1_T1", "ID1_T1", "ID2_T1", "ID2_T1"),
  `Process #` = c("P1", "P2", "P3", "P4", "P5", "P6"),
  `Start Date` = as.Date(c("2022-01-03", "2022-01-10", "2022-01-17", "2022-01-24", "2022-02-01", "2022-02-08")),
  `End Date` = as.Date(c("2022-01-09", "2022-01-16", "2022-01-23", "2022-01-31", "2022-02-07", "2022-02-14"))
)

执行合并操作:

# 分组并汇总目标字段
processed_df <- df %>%
  group_by(ID, `Transaction #`) %>%
  summarise(
    `Process #` = first(`Process #`),  # 保留每组第一条的Process编号
    `Start Date` = min(`Start Date`, na.rm = TRUE),  # 提取组内最早的起始日期
    `End Date` = max(`End Date`, na.rm = TRUE),  # 提取组内最晚的结束日期
    .groups = "drop"  # 处理完成后取消分组
  )

# 查看处理结果
print(processed_df)

关键细节说明

  • 如果你的原始数据是按流程顺序排列的,first()可以精准获取第一个Process #;若需要严格取组内第一条记录的Start Date,只需把min()替换为first()即可
  • na.rm = TRUE用于忽略可能存在的缺失值,避免计算出错
  • .groups = "drop"确保输出的是普通数据框,而非分组数据框,方便后续操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:55:16