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

R语言:拆分DataFrame时保留分隔符/1的实现方法

解决方案

原始数据

ref = c("ab/1bc/1", "dd/1", "cc/1", "2323")
text = c("car", "train", "mouse", "house")
data = data.frame(ref, text)

需求说明

将ref列中包含/1的单元格按/1拆分,拆分后保留/1并复制对应行;不含/1的行保持原样。


方法一:使用tidyverse工具链

library(tidyverse)

new_data <- data %>%
  # 用正向肯定预查在/1后拆分,保留分隔符
  mutate(ref = str_split(ref, "(?<=/1)")) %>%
  # 将拆分后的列表展开为多行
  unnest(ref) %>%
  # 过滤拆分后可能出现的空字符串(若原字符串以/1结尾)
  filter(ref != "")

正则说明:(?<=/1)是正向肯定预查,表示仅在/1字符的后方位置进行拆分,这样拆分出的每个片段都会保留/1,比如ab/1bc/1会被拆分为ab/1和bc/1。


方法二:基础R实现(无需额外包)

# 逐个处理ref值:含/1则拆分,否则保留原内容
split_ref <- lapply(data$ref, function(x) {
  if (grepl("/1", x)) {
    # perl=TRUE启用正则断言支持
    strsplit(x, "(?<=/1)", perl = TRUE)[[1]]
  } else {
    x
  }
})

# 生成对应text列的重复索引
row_idx <- rep(seq(nrow(data)), sapply(split_ref, length))

# 构建结果数据集
new_data <- data.frame(
  ref = unlist(split_ref),
  text = data$text[row_idx]
)

最终输出结果

ref   text
1 ab/1    car
2 bc/1    car
3 dd/1   train
4 cc/1   mouse
5 2323   house

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:10:34