分组操作生成分组标识新列:按两年组划分年份的实现问题
解决方法:生成两年一组的Yrgroup列
方法一:使用dplyr包
先加载dplyr,通过mutate创建新列,核心是先确定每组的起始年份(奇数年份),再拼接年份后两位形成目标格式:
library(dplyr) Yr = c(2011,2011,2012,2012,2013,2013,2014,2014) Tranship = c(2,5,8,2,2,2,7,8) df = data.frame(Yr, Tranship) df <- df %>% mutate( # 确定每组的起始奇数年份:偶数年份减1,奇数年份保持不变 start_yr = if_else(Yr %% 2 == 0, Yr - 1, Yr), # 拼接年份后两位成xx/xx格式 Yrgroup = paste0(substr(start_yr, 3, 4), "/", substr(start_yr + 1, 3, 4)) ) %>% select(-start_yr) # 移除中间临时列 print(df)
运行后输出:
Yr Tranship Yrgroup 1 2011 2 11/12 2 2011 5 11/12 3 2012 8 11/12 4 2012 2 11/12 5 2013 2 13/14 6 2013 2 13/14 7 2014 7 13/14 8 2014 8 13/14
方法二:基础R实现(无需额外包)
直接用ifelse和字符串拼接完成,逻辑和dplyr版本一致:
Yr = c(2011,2011,2012,2012,2013,2013,2014,2014) Tranship = c(2,5,8,2,2,2,7,8) df = data.frame(Yr, Tranship) # 计算每组起始年份 start_yr = ifelse(df$Yr %% 2 == 0, df$Yr - 1, df$Yr) # 生成Yrgroup列 df$Yrgroup = paste0(substr(start_yr, 3, 4), "/", substr(start_yr + 1, 3, 4)) print(df)
原代码问题说明
你之前的group_by(Yr+1)只是做了分组标记,不会自动生成新列,且分组逻辑不符合需求。要生成目标列,需要先推导每组的统一标识,再通过赋值操作填充Yrgroup。
内容的提问来源于stack exchange,提问作者J_S_Moss
相关产品推荐
相关产品推荐

