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

R语言如何按id分组基于日期列为dataframe添加从0计数的日程序号列

按ID分组生成日程序号的简便实现(tidyverse方案)

不需要编写自定义复杂函数,仅用dplyr基础功能即可实现,核心逻辑是先统一日期格式,再分组计算当前日期与组内最早日期的差值:

library(tidyverse)

# 1. 先将字符串格式的日期转为标准Date类型,示例日期为日-月-年格式,故format参数对应设置
# 若你的数据中date列已经是Date类型,可跳过该步
df <- df %>%
  mutate(date = as.Date(date, format = "%d-%m-%Y")) %>%
  # 2. 按id分组
  group_by(id) %>%
  # 3. 计算当前日期与组内最早日期的天数差,转数值即为所需序号
  mutate(day = as.numeric(date - min(date))) %>%
  # 可选:取消分组,避免后续操作受分组影响
  ungroup()

逻辑说明

  • 该方案严格匹配你的需求:组内最早日期的差值为0,后续日期按与首日的实际天数差计算序号,即使组内日期存在间隔也能正确计算
  • 此前用tidyverse实现失败大概率是未将字符串格式的日期转为标准Date类型,直接对字符串做减法运算会报错,先转格式即可解决问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:54:03