R语言中用tidyverse的str_replace移除括号及内容的问题
用tidyverse移除括号及其内部内容的正确方法
你的问题出在两个地方:
- 正则转义错误:R里字符串的反斜杠需要双写,你写的
"\([^()]*\)"会被R解析成([^()]*),相当于没给括号转义,自然匹配不到目标内容。 - 替换范围不足:
str_replace默认只替换第一个匹配项,要处理字符串里多个括号的情况(比如最后一条数据里的两个括号),得用str_replace_all。
正确的tidyverse实现代码
# 示例数据 Example <- data.frame(Column1 = c( "Pineapple ($1,000)", "($50,000) Roger", "($1,000)", "First ($100), Second ($1,000)")) # 处理后的数据 Output <- Example %>% mutate(Column1 = str_replace_all(Column1, "\\([^()]*\\)", ""))
运行结果
处理后Output$Column1的内容是:
[1] "Pineapple " " Roger" "" "First , Second "
这个逻辑和你用gsub实现的效果完全一致,因为str_replace_all就是tidyverse生态中对应gsub的批量替换函数,而str_replace对应单次替换的sub。
内容的提问来源于stack exchange,提问作者k3r0
相关产品推荐
相关产品推荐

