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
相关产品推荐
相关产品推荐

