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

R语言pivot_longer转宽表异常:出现列't',如何修正得目标格式

宽格式转长格式:修正pivot_longer的正则匹配问题

原始宽格式数据

Year <- c(2020, 2021)
Percent_a <- c(10,10)
Percent_b <- c(12,10)
Percent_c <- c(2,4)
Percent_d <- c(4,5)

df <- data.frame(Year, Percent_a, Percent_b, Percent_c, Percent_d)

目标长格式

Year  Item  Percent
2020  a     10
2020  b     12
2020  c     2
2020  d     4
2021  a     10
2021  b     10
2021  c     4
2021  d     5

问题分析

你尝试的代码中,names_pattern = "(.)_(.*)"仅匹配了列名的第一个字符(比如Percent_a中的P),导致.value只提取到单个字符,后续字符被错误拆分,最终出现了t列而非预期的Item列。

修正后的代码

library(tidyverse)

df %>%
  pivot_longer(
    cols = -Year,
    names_to = c(".value", "Item"),
    names_pattern = "(Percent)_(.*)"
  ) -> df_longer

关键修正点

  • names_pattern = "(Percent)_(.*)":精准匹配列名结构,第一个捕获组(Percent)对应.value,确保值列名称保留为Percent;第二个捕获组(.*)提取_后的字母作为Item的内容。
  • names_to = c(".value", "Item"):明确指定两个捕获组分别对应值列名称和Item列。

运行上述代码后,就能得到符合预期的长格式数据框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:25:59