如何将数据集中的年份列重编码为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
相关产品推荐
相关产品推荐

