R 删除字符后跟街道地址中的特定字符

R Remove character followed by specific character in Street Address

我想删除特定字符后的所有内容,但除了以下几个例外:

在第一个字符串中,我想删除 'st' 之后的所有内容(我在这里的解释是 St 代表街道),在第二个字符串中,'St' 代表圣徒,所以想保留原样的地址。

在第 3 个字符串中,我想删除 'Dr' 之后的所有内容(我在这里的解释是 Dr 代表驱动器),在第 4 个字符串中,'Dr' 代表医生,所以我想保留原样的地址。

下面是一个示例输入

str <- c("852 union St End",
         "852 St johns street",
         "30 Sandpiper Dr 35",
         "30 Dr Botero drive")

我的预期输出是

c("852 union St",
  "852 St johns street",
  "30 Sandpiper Dr",
  "30 Dr Botero drive")

下面是我正在使用的示例代码,但是它删除了 St / Dr 之后的所有内容

Scrubdata <- mgsub(str, 
                     c(" drive.*", " dr .*", 
                       " street.*", " st .*"), 
                     c(" drive", " dr",
                       " street", " st"), ignore.case = T)

有人有想法吗?

谢谢!

这里有一种方法可以删除 'St''Dr' 之后只有一个单词的单词:

sub('(?<=(St|Dr)) \w+$', '', str, perl = TRUE)
#[1] "852 union St"  "852 St johns street" "30 Sandpiper Dr" "30 Dr Botero drive"

使用str_remove

stringr::str_remove(str, '(?<=(St|Dr)) \w+$')