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

scr*_*Owl 13 string grep r

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

我想这样做:

Middletown Township
Sunny Valley Borough
Hillside Village
Run Code Online (Sandbox Code Playgroud)

进入这个:

Middletown
Sunny Valley
Hillside
Run Code Online (Sandbox Code Playgroud)

有什么建议?理想情况下,我也想知道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")
Run Code Online (Sandbox Code Playgroud)

Jos*_*ien 20

这将有效:

gsub("\\s*\\w*$", "", df1$city)
[1] "Middletown"   "Sunny Valley" "Hillside"   
Run Code Online (Sandbox Code Playgroud)

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


Tyl*_*ler 14

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

sub(df1$city, pattern = " [[:alpha:]]*$", replacement = "")
Run Code Online (Sandbox Code Playgroud)

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

这正在替换以空格开头的子字符串,然后只包含字母,直到字符串结尾,并带有空字符串.


小智 7

我会word()在 stringr 包中使用,如下所示:

df1 %>% mutate(city = word(city , 1  , -2))
Run Code Online (Sandbox Code Playgroud)

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