仅搜索和替换R中的特定行

时间:2018-07-26 14:12:45

标签: r search replace

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

这是我的数据库:

 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 < strong> R AD。

我也尝试使用substr(),但是像3.中一样,在替换字母前可能会有一些字符。因为我有约60万个地址,所以会有很多这样的例外。

是否可以在这些功能中添加一些限制以实现我的目标?

2 个答案:

答案 0 :(得分:1)

您可以使用\\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 ", .)

答案 1 :(得分:-1)

您可以使用stringr尝试一些正则表达式。如果“ RUE”的“ R”将始终是每行中的第一个“ R”字符,则可以使用stringr::str_replace,它仅替换每个字符串中的第一个匹配项:

library(tidyverse)
#> Warning: package 'dplyr' was built under R version 3.5.1
data <- c(
  "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")
data %>% 
  str_replace("(?<!\\w)R(?!\\w)", "RUE")
#> [1] "1. 41 RUE JEAN JAURES 93170"    "2. 42 AV DE STALINGRAD 93170"
#> [3] "3. 51 57 RUE JULES FERRY 93170" "4. 1 RUE DU HAVRE 93170"

编辑:根据评论在“ R”之后添加第二个reprex