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

在R中批量将相似命名列转换为长格式的方法求助

解决R中pivot_longer转换长格式时出现大量NA的问题

你的问题出在names_sep="_"的分割逻辑上:它会按第一个下划线拆分列名,要是你的列前缀里本身包含下划线(比如存在Teacher_Exp_2019这类列名),拆分后年份部分会变成Exp_2019,导致无法和其他同年份的列匹配,最终生成大量NA。

正确的做法是用正则表达式精准匹配年份部分,不管前缀里有多少个下划线,只提取最后一个下划线后的四位数字作为年份。代码如下:

library(tidyverse)

data <- read.csv("https://raw.githubusercontent.com/ilzl/i/master/prac.csv") %>%
  pivot_longer(
    cols = -id,
    names_to = c(".value", "year"),
    # 正则规则:捕获下划线前的所有内容作为列前缀,下划线后四位数字作为年份
    names_pattern = "(.*)_(\\d{4})"
  ) %>%
  # 把year从字符转成数值型
  mutate(year = as.numeric(year))

关键说明

  • names_pattern = "(.*)_(\\d{4})":
    • (.*):匹配并捕获下划线前的所有内容,对应.value(也就是保留的原列前缀,比如ratio、EL、Teacher)
    • (\\d{4}):匹配并捕获四位数字,对应year列,确保只提取2019、2020这类年份值
  • 最后用mutate把year转成数值型,方便后续按年份做分析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:01:21