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

R语言如何按双条件拆分同一列中不同格式的字符串?

R语言按条件拆分字符串实现方案

核心思路

  • 先逐行检测字符串是否包含docx关键词
  • 根据检测结果动态匹配对应的拆分分隔符
  • 逐行应用对应分隔符完成拆分

基础R实现代码

示例数据构造

data = data.frame(
  string = c("HFUFN-087836_661", "207465-125 - IK_6 Mar 2009.docx_37484956")
)

拆分逻辑实现

# 检测每个字符串是否包含docx,动态生成拆分规则
split_pattern <- ifelse(grepl("docx", data$string), "x_", "_")
# 逐行应用对应拆分规则
split_res <- mapply(strsplit, x = data$string, split = split_pattern)
# 将拆分结果转为两列数据框
data_split <- data.frame(
  part1 = sapply(split_res, function(x) x[1]),
  part2 = sapply(split_res, function(x) x[2])
)

优化说明

如果需要保留docx的完整后缀,避免拆分后丢失末尾的x字符,可以把docx对应的拆分符替换为正则正向后视断言:

# 含docx的字符串按docx后的_拆分,保留完整docx后缀
split_pattern <- ifelse(grepl("docx", data$string), "(?<=docx)_", "_")
# 拆分时需要开启perl正则支持
split_res <- mapply(strsplit, x = data$string, split = split_pattern, perl = TRUE)

Tidyverse风格实现(可选)

如果你习惯使用tidyverse系列工具,也可以用separate函数实现:

library(tidyverse)
data %>%
  separate(
    col = string,
    into = c("part1", "part2"),
    sep = if_else(str_detect(string, "docx"), "(?<=docx)_", "_"),
    extra = "merge",
    perl = TRUE
  )

输出结果示例

使用优化后的正则拆分后,得到的结果如下:

part1part2
HFUFN-087836661
207465-125 - IK_6 Mar 2009.docx37484956

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:45:02