如何去除tibble列字符串中的重复双字符序列并保留8位长度?
解决方案
核心思路
借助tidyverse内置的stringr包,用正则匹配并移除连续重复的双字符序列,最终得到固定8位的目标字符串。
代码实现
假设你的tibble名为df,待处理列名为target_col,执行以下代码即可完成清洗:
library(tidyverse) df_cleaned <- df %>% # 替换所有连续重复的双字符为单个双字符 mutate(target_col = str_replace_all(target_col, "(..)\\1", "\\1")) %>% # 极端情况(多次重复)下强制截取前8位,保证结果长度合规 mutate(target_col = str_sub(target_col, 1, 8))
正则逻辑说明
(..):捕获任意两个连续字符作为匹配分组\\1:引用上述捕获的分组,精准匹配与该分组完全一致的重复双字符str_replace_all会遍历字符串,替换所有符合规则的重复序列
示例验证
用你给出的异常字符串测试,结果如下:
- 输入
ABABCDEF12→ 处理后ABCDEF12 - 输入
ABCDCDEF12→ 处理后ABCDEF12 - 输入
ABCDEFEF12→ 处理后ABCDEF12
内容的提问来源于stack exchange,提问作者pure_func
相关产品推荐
相关产品推荐

