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

分组操作生成分组标识新列:按两年组划分年份的实现问题

解决方法:生成两年一组的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:35:32