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

如何基于列名末尾的4位年份对多列执行pivot_longer操作?

列名含后缀年份的宽表转长表(pivot_longer实现)

针对你这种列名以.4位年份结尾的宽表,用tidyr::pivot_longer配合正则表达式就能高效完成转置,核心是拆分列名为变量名和年份两个字段:

步骤1:加载必要包

需要用到tidyverse(包含tidyr和dplyr):

library(tidyverse)

步骤2:执行转置操作

直接用pivot_longer的names_pattern参数通过正则拆分列名:

df_long <- df %>%
  pivot_longer(
    cols = -id,  # 保留id列,其余列都转为长格式
    names_pattern = "(.*)\\.(\\d{4})",  # 正则匹配规则
    names_to = c("variable", "year"),   # 拆分后生成的两个列名
    values_to = "value"                 # 对应值的列名
  )

正则表达式解释

  • (.*):贪婪匹配列名中最后一个点之前的所有内容,不管列名本身是否包含其他点(适配不规则列名)
  • \\.:匹配分隔变量名和年份的点(正则中点是特殊字符,需用反斜杠转义)
  • (\\d{4}):匹配末尾的4位数字年份

转置结果示例

运行后得到的长表结构如下:

> head(df_long)
# A tibble: 6 × 4
  id    variable year  value
  <chr> <chr>    <chr> <chr>
1 a     column1  2015  1    
2 a     column1  2016  4    
3 a     column1  2017  4    
4 a     column1  2018  4    
5 a     column1  2019  4    
6 a     column2  2015  1    

可选优化:转换值类型

如果你的值原本是数值型(示例中是字符),可以追加一步转类型:

df_long <- df_long %>%
  mutate(value = as.numeric(value))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:42:30