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

如何将R数据框中多组同名前缀变量转换为长格式?

R数据框按列前缀分组重塑(宽转长)

你可以用tidyverse工具集里的tidyr包来实现这个格式转换,核心思路是先把宽表转成长表拆分列名,再转回宽表重组结构。以下是完整实现代码和步骤说明:

代码实现

library(tidyverse)

# 示例数据
DATA <- read.table(header=T, text=
"InstNm    OTE_CPct OTE_L OTE_P    OTE_R      RAE_EPct RAE_NPct RAE_L RAE_B RAE_P  RAE_R
 Baker          60      1     1  Limited            56     76     1     0     1   Limited")

# 执行重塑
result <- DATA %>%
  # 把所有带前缀的列转为长格式,提取列名和对应值
  pivot_longer(cols = -InstNm, names_to = "key", values_to = "value") %>%
  # 拆分列名为"Indicator(前缀)"和"Metric(指标名)"两部分
  separate(key, into = c("Indicator", "Metric"), sep = "_") %>%
  # 把指标名转回列,对应填充值
  pivot_wider(names_from = Metric, values_from = value) %>%
  # 把原R列重命名为Rating,匹配目标格式
  rename(Rating = R) %>%
  # 调整列顺序,和目标输出一致
  select(InstNm, Indicator, Rating, CPct, NPct, EPct, L, P, B)

# 查看结果
print(result)

步骤说明

  1. pivot_longer转长表:将除InstNm外的所有列压缩成key(原列名)和value(对应数值)两列,为拆分前缀做准备。
  2. separate拆分列名:按下划线_把key列拆成Indicator(如OTE/RAE)和Metric(如CPct/L/R),区分分组标识和具体指标。
  3. pivot_wider转回宽表:将Metric列的不同值转为新列,用value填充对应内容,缺失的指标自动补NA。
  4. 重命名与列序调整:把原R列改名为Rating,再调整列的顺序完全匹配目标输出格式。

验证结果

可以用以下代码验证转换后的数据是否和目标一致:

Desired_output <- read.table(header=T, text=
"InstNm    Indicator Rating  CPct NPct  EPct  L   P  B
 Baker     OTE      Limited  60   NA    NA    1   1  NA
 Baker     RAE      Limited  NA   76    56    1   1  0")

# 忽略属性检查,只比较数据内容
all.equal(result, Desired_output, check.attributes = FALSE)
# 输出TRUE表示转换正确

这个方法是通用的——哪怕你有更多前缀的列组(比如XXX_、YYY_开头),代码不需要修改就能自动处理所有分组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 11:05:10