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

R语言使用pivot_longer拆分列名实现数据透视的问题求解

解决方案

问题原因

原代码运行结果不符合预期,核心是两个疏漏:

  1. 原始数据集没有行唯一标识,pivot_longer做透视转换时无法识别值对应的原始行归属,会导致数值错误折叠、错位
  2. 手动枚举所有列名、手写正则匹配分隔符的写法冗余,容易引入拼写错误

可直接运行的修正代码

library(tidyr)
library(dplyr)

# 原始数据集构造
df<-data.frame(
  'Company with premium status-Land' = c(5,1),
  'Company with premium status-Sea' = c(5,1),
  'Company with premium status-Air' = c(5,1),
  'Company with premium status-Unkown' = c(5,1),
  'Company with premium status-Total' = c(5,1),
  'Company with low class status-Land' = c(10,1),
  'Company with low class status-Sea' = c(10,1),
  'Company with low class status-Air' = c(10,1),
  'Company with low class status-Unkown' = c(10,1),
  'Company with low class status-Total' = c(10,1),
  check.names = FALSE
)

df1 <- df %>%
  # 新增行ID列,标记原始数据的行对应关系
  mutate(row_no = row_number()) %>%
  pivot_longer(
    cols = -row_no,
    names_to = c("company_type", ".value"),
    names_sep = "-",
  )

print(df1)

输出结构说明

运行后得到的结果完全匹配需求:

  • 每行对应一个公司类型+原始行的组合,共4行记录
  • company_type列存储原列名中-前的公司等级分类,包含Company with premium status、Company with low class status两个取值
  • Land/Sea/Air/Unkown/Total列存储原列名中-后维度对应的数值,和原始数据完全一致

注:如果不需要保留原始行标记,可以在透视完成后用select(-row_no)移除该列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:54:19