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

在R中根据模式与分隔符将数据框列拆分为多列

拆分数据框中的字符串列

数据准备

先加载原始数据框:

df <- read.table(text = " parameter_1_day_10
                    parameter_1_day_3 
                    parameter_2_last_day", header = FALSE, col.names = "V1")

目标是将V1列拆分为两列:第一列为parameter_后的数字,第二列为数字后下划线开始的剩余字符串,最终结构如下:

# 目标输出
#   num day_part
# 1   1  day_10
# 2   1   day_3
# 3   2 last_day

解决方案

方法1:用tidyverse工具(tidyr::extract)

extract函数可通过正则表达式的捕获组直接提取目标内容,代码简洁高效:

library(tidyr)

df2 <- df %>%
  extract(V1, into = c("num", "day_part"), regex = "parameter_(\\d+)_(.*)", convert = TRUE)
  • regex = "parameter_(\\d+)_(.*)":定义两个捕获组,(\\d+)匹配数字部分,(.*)匹配剩余所有字符
  • convert = TRUE:自动将数字列转换为整数类型

方法2:基础R实现

无需额外加载包,用内置字符串处理函数完成拆分:

# 提取数字列
df$num <- as.integer(sub("parameter_(\\d+)_.*", "\\1", df$V1))
# 提取日期部分列
df$day_part <- sub("parameter_\\d+_(.*)", "\\1", df$V1)
# 筛选需要的列
df2 <- df[, c("num", "day_part")]
  • sub函数通过正则表达式替换,\\1引用捕获组匹配到的内容

方法3:用stringr包提取

如果习惯stringr语法,可通过str_match提取捕获组内容:

library(stringr)

# 匹配所有捕获组
match_result <- str_match(df$V1, "parameter_(\\d+)_(.*)")
# 转换为数据框
df2 <- data.frame(
  num = as.integer(match_result[, 2]),
  day_part = match_result[, 3],
  stringsAsFactors = FALSE
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 10:01:07