R语言str_replace_all未替换$,PDF数据清洗与格式转换求助
问题分析与解决
你的代码存在两个关键问题:
- 正则特殊符号未转义:
$在正则表达式里是表示「行尾」的锚点字符,不是普通的美元符号。直接用pattern = "$"只会匹配字符串末尾,所以才会在最后多一个逗号,完全没处理中间的$。必须用\\$来表示字面意义的美元符号。 - 处理步骤冗余:没必要先删除所有减号再替换,可优化为一步完成格式清理。
修正后的逗号分隔代码
library(stringr) c("17.23--$16.50--$19.68--$15.35--$15.64---$14.23--$17.29---$15.51---$17.8") %>% str_replace_all(pattern = "-+\\$", replacement = ",") %>% # 匹配1个及以上减号+美元符号,替换为逗号 str_remove_all(pattern = "-") # 清理字符串末尾残留的减号
运行后输出符合预期:"17.23,16.50,19.68,15.35,15.64,14.23,17.29,15.51,17.8"
直接转单列的方法
要跳过逗号分隔直接转为单列数据,使用separate_rows时同样需要转义$,先清理所有减号即可:
library(tidyr) library(stringr) tibble(text = c("17.23--$16.50--$19.68--$15.35--$15.64---$14.23--$17.29---$15.51---$17.8")) %>% mutate(text = str_remove_all(text, "-")) %>% separate_rows(text, sep = "\\$")
输出为9行的单列数据框:
# A tibble: 9 × 1 text <chr> 1 17.23 2 16.50 3 19.68 4 15.35 5 15.64 6 14.23 7 17.29 8 15.51 9 17.8
另外补充:RStudio里类似Ctrl+H的批量替换,可直接用Ctrl+H(选中文本时)或Ctrl+Shift+F打开全局替换窗口,和常规办公软件操作逻辑一致,能批量替换代码或文本内容。
内容的提问来源于stack exchange,提问作者ibm
相关产品推荐
相关产品推荐

