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

如何使用pivot_longer单次操作将宽表转换为多列长表?

回答

可以仅用单次pivot_longer命令完成转换,无需多次调用,核心是利用pivot_longer支持多组变量同时重塑的特性,具体实现如下:

核心代码

# 加载所需包
library(tidyr)
library(magrittr) # 若已加载tidyverse则无需单独加载

# 单次pivot_longer实现转换
res <- df %>% 
  pivot_longer(
    cols = everything(), # 选中所有待转换列
    names_to = c(".value", "z"), # 第一部分拆分结果作为新列名,第二部分存入z列
    names_pattern = "^([xy])(\\d)$", # 正则拆分原列名:前缀x/y + 后缀数字
    names_transform = list(z = as.integer) # 将z列从默认字符类型转为整数类型
  )

代码说明

  • names_to中传入的特殊标记.value会告诉pivot_longer,把列名拆分后对应位置的内容作为新生成的列名,这里拆分后的第一部分是x/y,就会自动生成x、y两列存储对应的值
  • names_pattern用正则把原列名拆成两个捕获组,第一个组匹配x或y,第二个组匹配末尾的数字,正好对应names_to的两个参数
  • 转换后的数据行数为原行数*3,结构、数值和你给出的目标结果完全一致,是当前最简便的实现方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:36:08