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

时间:2012-10-26 20:24:37

标签: string r grep

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

我想这样做:

Middletown Township
Sunny Valley Borough
Hillside Village

进入这个:

Middletown
Sunny Valley
Hillside

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

这是dput:

> 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")

3 个答案:

答案 0 :(得分:19)

这将有效:

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

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

答案 1 :(得分:14)

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

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

[1]“Middletown”“Sunny Valley”“Hillside”

那是替换以空格开头的子字符串,然后只包含字母,直到字符串的结尾,并带有空字符串。

答案 2 :(得分:0)

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

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

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