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

如何在R中透视成对列?使用names_pattern参数实现宽表转长表

解决方法

你可以直接用tidyr::pivot_longer()搭配正确的names_pattern正则表达式实现需求,核心是通过两个捕获组分别提取问题编号和指标类型,配合.value参数自动生成新列:

# 加载所需包
library(tidyr)
library(dplyr)

# 数据转换
res <- dat %>%
  pivot_longer(
    cols = everything(), # 转换所有列
    # 正则捕获两组内容:第一组是Q8_数字,第二组是下划线后的指标名
    names_pattern = "^(Q8_\\d)_(.*)$",
    # 第一组存为Question列,第二组作为新的列名取对应值
    names_to = c("Question", ".value")
  ) %>%
  # 按需求保留两位小数,对齐预期输出
  mutate(
    Weighted_Average = round(avg, 2),
    Weighted_SE = round(avg_se, 2),
    Unweighted_Average = round(unweighted, 2)
  ) %>%
  # 筛选保留需要的列
  select(Question, Weighted_Average, Weighted_SE, Unweighted_Average)

运行后得到的res和你期望的输出结构完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:06:05