我正在尝试做某事,但记不起/找不到答案。 我有人口普查局提供的城市名称列表,他们将城市类型放在最后,这弄乱了我的
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"))
)
这会起作用:
gsub("\\s+\\w*$", "", df1$city)
[1] "Middletown" "Sunny Valley" "Hillside"
它会删除由一个或多个空格字符组成的任何子字符串,后跟任意数量的“单词”字符(空格、数字或下划线),最后是字符串结尾。
这是一个可以满足您需要的正则表达式:
sub(df1$city, pattern = " [[:alpha:]]*$", replacement = "")
[1]“米德尔敦”“阳光谷”“山坡”
这将以空字符串替换以空格开头、然后仅包含字母直到字符串末尾的子字符串。
我会在 stringr 包中使用
word()
,如下所示:
df1 %>% mutate(city = word(city , 1 , -2))
第一个参数 (
1
) 表示您从第一个单词开始,第二个 (-2
) 表示您将所有内容保留到倒数第二个单词。