我正在尝试做一些但不记得/找到答案。我有一份来自人口普查局的城市名称列表,他们把城市的类型放在最后,这弄乱了我的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")
答案 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
) 表示您将所有内容保留到倒数第二个单词。>