首页 > 解决方案 > 仅搜索和替换 R 中的特定行

问题描述

我想在我的数据库中搜索和替换一些字符,但不是在所有行中。

这是我的数据库:

 1. 41 R JEAN JAURES 93170
 2. 42 AV DE STALINGRAD 93170
 3. 51 57 R JULES FERRY 93170
 4. 1 R DU HAVRE 93170

我想替换为:

 5. 41 RUE JEAN JAURES 93170
 6. 42 AVENUE DE STALINGRAD 93170
 7. 51 57 RUE JULES FERRY 93170
 8. 1 RUE DU HAVRE 93170

所以,我尝试了这个sub()函数,但2.它会替换第一个函数,R所以它将是 STALING RUE AD 而不是 STALING R AD。

我也尝试了substr()but like in 3. 在要替换的字母之前可能有一些很长的字符。因为我有大约 600k 地址,所以会有很多这样的例外。

有没有办法在这些功能中添加一些限制来实现我的目标?

标签: rsearchreplace

解决方案


您可以使用\\s+匹配 1 个或多个空格以及\\s*匹配 0 个或多个空格。

 vec <- c("41 R JEAN JAURES 93170",
 "42 AV DE STALINGRAD 93170",
 "51 57 R JULES FERRY 93170",
 "1 R DU HAVRE 93170")


 library(magrittr)
 vec %>% 
   gsub("\\s*R\\s+", " RUE ", .) %>%
   gsub("\\s*AV\\s+", " AVENUE ", .)

[1] "41 RUE JEAN JAURES 93170"      "42 AVENUE DE STALINGRAD 93170"
[3] "51 57 RUE JULES FERRY 93170"   "1 RUE DU HAVRE 93170" 

此外,您可能会考虑\\b单词边界(包括空格):

 vec %>% 
   gsub("\\bR\\s+", "RUE ", .) %>%
   gsub("\\bAV\\s+", "AVENUE ", .)

推荐阅读