You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言str_replace_all未替换$,PDF数据清洗与格式转换求助

问题分析与解决

你的代码存在两个关键问题:

  1. 正则特殊符号未转义:$在正则表达式里是表示「行尾」的锚点字符,不是普通的美元符号。直接用pattern = "$"只会匹配字符串末尾,所以才会在最后多一个逗号,完全没处理中间的$。必须用\\$来表示字面意义的美元符号。
  2. 处理步骤冗余:没必要先删除所有减号再替换,可优化为一步完成格式清理。

修正后的逗号分隔代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 16:52:54