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

如何将数据集中的年份列重编码为0、1、2等连续序号?

解决方法

核心思路

你的年份是1952到2007的连续值,直接计算每个年份与最小年份(1952)的差值就能得到0、1、2...的序列,不需要复杂的recode()或额外排序(除非数据年份是乱序的,可先排序)。

方法1:Base R 实现

假设数据集名为df,年份列名为year:

# 若年份是字符型,先转成数值型
df$year <- as.numeric(df$year)
# 生成新的索引列
df$year_index <- df$year - min(df$year)

方法2:dplyr(tidyverse)实现

如果习惯用tidyverse工具链:

library(dplyr)

df <- df %>%
  # 确保年份是数值型(若原本为字符型)
  mutate(year = as.numeric(year)) %>%
  # 生成索引列
  mutate(year_index = year - min(year))

特殊情况处理:年份不连续/有缺失值

如果数据里年份不完全连续(比如缺了某几年),想要按年份出现的顺序生成0、1、2...的索引,可使用match()函数:

# Base R 版本
df$year_index <- match(df$year, sort(unique(df$year))) - 1

# dplyr 版本
df <- df %>%
  mutate(year_index = match(year, sort(unique(year))) - 1)

补充说明

  • 之前用arrange()没解决,大概率是只做了排序但没计算差值;recode()需要手动映射每个年份,效率极低,完全没必要用。
  • 执行完可通过head(df)检查结果,确认1952对应的year_index为0,1953为1,以此类推。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:45:32