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

如何重命名带编号变量并通过pivot_longer实现长格式转换?

解决变量后缀导致pivot_longer转换失败的问题

方法1:先重命名变量统一结构

先通过正则表达式把带___N后缀的变量和普通格式的变量统一命名规则,再进行长格式转换:

  1. 构造示例数据(模拟你的数据集)
library(tidyverse)

df1 <- tibble(
  id = 1:5,
  dem_lb1 = rnorm(5),
  dem_ds1 = rnorm(5),
  dem_tw1___1 = rnorm(5),
  dem_tw2___1 = rnorm(5),
  dem_lb2 = rnorm(5),
  dem_ds2 = rnorm(5),
  dem_tw1___2 = rnorm(5),
  dem_tw2___2 = rnorm(5),
  dem_lb3 = rnorm(5),
  dem_ds3 = rnorm(5),
  dem_tw1___3 = rnorm(5),
  dem_tw2___3 = rnorm(5)
)
  1. 重命名变量,统一为dem_<变量名>_<分组号>格式
df1_clean <- df1 %>%
  rename_with(
    .fn = ~ str_replace(., "(dem_)(lb|ds|tw1|tw2)(___)?(\\d)$", "\\1\\2_\\4"),
    .cols = starts_with("dem_")
  )
  • 正则说明:捕获前缀dem_、变量类型(lb/ds/tw1/tw2)、可选的___、末尾的分组号,将其重组为统一的下划线分隔格式。
  1. 转换为长格式
df_long <- df1_clean %>%
  pivot_longer(
    cols = starts_with("dem_"),
    names_to = c(".value", "group"),
    names_pattern = "dem_(.*)_(\\d)"
  )
  • .value表示保留变量名的前缀部分作为新列名,group提取分组号作为新列。

方法2:直接在pivot_longer中适配两种变量格式

无需提前重命名,直接用正则表达式匹配两种变量格式:

df_long <- df1 %>%
  pivot_longer(
    cols = starts_with("dem_"),
    names_to = c(".value", "group"),
    names_pattern = "dem_(lb|ds|tw1|tw2)(?:___)?(\\d)"
  )
  • 正则中的(?:___)?是非捕获组,用于匹配可选的___后缀,同时不将其作为命名组的一部分,直接提取变量类型和分组号。

两种方法最终都会得到每个参与者对应每个分组的lb、ds、tw1、tw2四个变量的长格式数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:50:02