从字符串中删除最后一个单词

问题描述 投票:0回答:3

我正在尝试做某事,但记不起/找不到答案。 我有人口普查局提供的城市名称列表,他们将城市类型放在最后,这弄乱了我的

match()

我想做这个:

Middletown Township
Sunny Valley Borough
Hillside Village

进入这个:

Middletown
Sunny Valley
Hillside

有什么建议吗? 理想情况下,我还想知道 R 中是否有

lastIndexOf()
函数。

数据如下:

df1 <- data.frame(
  id = c(1, 2, 3),
  city = factor(c("Middletown Township", "Sunny Valley Borough", "Hillside Village"))
)
r regex string
3个回答
22
投票

这会起作用:

gsub("\\s+\\w*$", "", df1$city)
[1] "Middletown"   "Sunny Valley" "Hillside"   

它会删除由一个或多个空格字符组成的任何子字符串,后跟任意数量的“单词”字符(空格、数字或下划线),最后是字符串结尾。


19
投票

这是一个可以满足您需要的正则表达式:

sub(df1$city, pattern = " [[:alpha:]]*$", replacement = "")

[1]“米德尔敦”“阳光谷”“山坡”

这将以空字符串替换以空格开头、然后仅包含字母直到字符串末尾的子字符串。


8
投票

我会在 stringr 包中使用

word()
,如下所示:

df1 %>% mutate(city = word(city , 1  , -2))

第一个参数 (

1
) 表示您从第一个单词开始,第二个 (
-2
) 表示您将所有内容保留到倒数第二个单词。

© www.soinside.com 2019 - 2024. All rights reserved.