如何在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
相关产品推荐
相关产品推荐

