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

如何在R中按区域将数据按两年间隔分组并新增标识列

R语言按区域动态划分两年间隔分类实现方案

实现思路

  • 步骤1:按区域分组,计算每个区域的最早年份min_year
  • 步骤2:基于各区域最早年份,计算每行数据所属的两年间隔起始点:以(年份 - 区域最早年份) %/% 2 * 2 + 区域最早年份得到间隔起始年,间隔结束年为起始年+1
  • 步骤3:按「区域+间隔起始年」分组,统计每组内的年份数量,判断是单年还是双年数据,生成对应标签

完整实现代码

# 加载依赖包
library(dplyr)

df_result <- df %>%
  # 年份转数值型方便计算
  mutate(year = as.integer(year)) %>%
  # 步骤1:计算每个区域的最早年份
  group_by(region) %>%
  mutate(min_year = min(year)) %>%
  # 步骤2:计算每行所属的两年间隔起止年
  mutate(
    gap_start = min_year + (year - min_year) %/% 2 * 2,
    gap_end = gap_start + 1
  ) %>%
  # 步骤3-4:按分组判断年份数量生成对应标签
  group_by(region, gap_start) %>%
  mutate(
    year_group = if_else(
      n_distinct(year) == 2,
      paste0(gap_start, "-", gap_end),
      as.character(year)
    )
  ) %>%
  # 可选:移除中间计算列,保留原始字段+新生成的分类列
  ungroup() %>%
  select(-min_year, -gap_start, -gap_end)

关键逻辑说明

步骤2的核心是用整数除法%/%实现两年间隔的自动分组:和区域最早年份的差值除以2取整,再乘2回推,就能保证同一间隔内的年份对应同一个起始值,完美适配每个区域不同的起始年份要求。

举例:若某区域最早年份为2010,2010、2011与起始年的差值为0、1,除以2取整结果均为0,对应间隔2010-2012;2012、2013差值为2、3,除以2取整结果均为1,对应间隔2012-2013,以此类推。若间隔内仅存在单个年份(如样本中的2019年),则直接保留原年份值作为分类标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:06:03