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

如何将R语言数据框中的name列拆分为scale、item、time三列?

拆分name列为scale、item、time变量的实现方法

我们已得到经pivot_longer转换后的长格式tibble,其中name列的格式为xyz数字_t数字或ab数字_t数字,需要将其拆分为三个变量:

  • scale:提取前缀(如xyz、ab)
  • item:提取前缀后的数字(如1、2)
  • time:提取_t后的数字(如1、2、3)

以下是几种基于tidyverse的实现方法:

方法1:使用separate_wider_regex(tidyr 1.3.0+推荐)

通过正则表达式直接定义各变量的匹配规则,逻辑清晰:

library(tidyverse)

# 假设长表对象为long_df
long_df %>%
  separate_wider_regex(
    name,
    patterns = list(
      scale = "(xyz|ab)",
      item = "(\\d)",
      "_t", # 跳过固定分隔符部分
      time = "(\\d)"
    )
  )

方法2:使用extract函数

利用正则捕获组一次性提取三个变量,还可自动转换数据类型:

long_df %>%
  extract(
    name,
    into = c("scale", "item", "time"),
    regex = "(xyz|ab)(\\d)_t(\\d)",
    convert = TRUE # 将item和time转为整数类型
  )

方法3:分步拆分(无需复杂正则)

先按_t拆分出time,再拆分前缀与item:

long_df %>%
  # 第一步拆分出scale_item和time
  separate(name, into = c("scale_item", "time"), sep = "_t", convert = TRUE) %>%
  # 第二步在xyz/ab后拆分出scale和item
  separate(scale_item, into = c("scale", "item"), sep = "(?<=xyz|ab)", convert = TRUE)

内容的提问来源于stack exchange,提问作者D. Studer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:20:20