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

如何在R中按id生成递增年份序列?优先采用tidyverse方案

按ID生成逐年递增的年份序列解决方案

需求说明

现有如下DataFrame,需要针对每个id,将year变量转换为从该组首个观测值开始、每行递增1的序列:

原始数据

id    year
001   1988
001   1988
001   1988
001   1988
001   1988
002   1972
002   1972
002   1972
002   1972

数据定义代码:

df <- data.frame(id = c("001", "001", "001", "001", "001", "002", "002", "002", "002"),
                 year = c(1988, 1988, 1988, 1988, 1988, 1972, 1972, 1972, 1972))

期望输出

id    year
001   1988
001   1989
001   1990
001   1991
001   1992
002   1972
002   1973
002   1974
002   1975

tidyverse解决方案

使用dplyr的分组操作即可实现,代码如下:

library(tidyverse)

df_processed <- df %>%
  group_by(id) %>%
  mutate(year = first(year) + row_number() - 1) %>%
  ungroup()

# 查看结果
print(df_processed)

代码逻辑解释

  • group_by(id):按id对数据分组,确保后续操作在每个id组内独立执行
  • first(year):提取每个组内的第一个年份值(即该id的起始年份)
  • row_number():获取当前行在组内的序号(从1开始)
  • first(year) + row_number() - 1:用起始年份加上行号减1,得到从起始年开始逐行递增1的序列
  • ungroup():取消分组,恢复数据的普通结构

运行上述代码后,即可得到符合要求的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:55:12