2012-10-26 70 views
9

我正在尝试执行某些操作,但不记得/找到答案。我从人口普查局获得了一个城市名称列表,他们把这个城市的类型放在了我的match()上。R删除字符串中的最后一个单词

我想使这个:

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

回答

15

这将工作:

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

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

+0

如果我想获得“乡镇,乡镇”即最后一个词,该怎么办。并将其保存为新变量? – jacob

+1

你可以使用stringi包。函数名称是stri_extract_last_words。你可以给这个函数提供一个句子列表,它会返回那些句子中最后一个单词的列表。然而,它不会删除句子中的最后一个单词,为了消除目的,我们需要由乔希提供的gsub命令 – rkmalaiya

12

这里有一个正则表达式已经做了你需要的东西:

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

[1]“米德尔敦”,“阳光谷”,“山坡”

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

+0

+1这个正则表达式更好的答案,因为它使单个单词完好无损。 – topchef

相关问题