15

我正在尝试做某事,但不记得/找到答案。我有一份来自人口普查局的城市名称列表,他们把城市的类型放在最后,这弄乱了我的match().

我想做这个:

Middletown Township
Sunny Valley Borough
Hillside Village

进入这个:

Middletown
Sunny Valley
Hillside

有什么建议么?理想情况下,我还想知道lastIndexOf()R 中是否有函数。

这是输出:

> dput(df1)
structure(list(id = c(1, 2, 3), city = structure(c(2L, 3L, 1L
), .Label = c("Hillside Village", "Middletown Township", "Sunny Valley Borough"
), class = "factor")), .Names = c("id", "city"), row.names = c(NA, 
-3L), class = "data.frame")
4

3 回答 3

22

这将起作用:

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

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

于 2012-10-26T20:28:04.000 回答
18

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

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

[1] 《中城》《阳光谷》《山坡》

那就是用一个空字符串替换一个以空格开头,然后只包含字母直到字符串结尾的子字符串。

于 2012-10-26T20:29:44.353 回答
2

我会word()像这样在 stringr 包中使用:

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

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

于 2021-04-20T08:43:06.580 回答