R dplyr工作流中用正则替换字符串括号内非数字字符的方法
实现方案
你可以结合dplyr和purrr处理列表列,核心逻辑是识别括号区间,合并区间内的数字后替换原区间内容,完整代码如下:
首先加载依赖包:
library(dplyr) library(purrr)
数据处理代码:
df <- df %>% mutate(x = map(x, function(vec) { # 识别左、右括号的位置 left_pos <- which(vec == "(") right_pos <- which(vec == ")") # 无括号直接返回原向量 if (length(left_pos) == 0 || length(right_pos) == 0) return(vec) # 匹配第一个左括号对应的最近右括号 pair_right <- right_pos[right_pos > left_pos[1]][1] # 提取括号内数字拼接为字符串 num_combined <- paste0(vec[(left_pos[1]+1):(pair_right-1)], collapse = "") # 替换原括号区间为拼接后的数字 c(vec[1:(left_pos[1]-1)], num_combined, vec[(pair_right+1):length(vec)]) }))
结果验证
将处理后的x列转为字符串打印,可确认符合预期输出:
df %>% mutate(x_str = map_chr(x, paste, collapse = ", ")) %>% pull(x_str)
输出结果:
[1] "0, 1, 0, 0, 0, 0, 0, 0, 0" "10, 1, 1, 4, 0, 0, 0, 6, x, )" [3] "0, 0, 2, 2, 0, 0, 0, 1, 0" "0, 0, 0, 0, 0, 11, 0, 1, x" [5] "3, 1, 1, 2, 0, 0"
内容的提问来源于stack exchange,提问作者TarJae
相关产品推荐
相关产品推荐

