在R中的前两个单词之后提取所有内容

时间:2015-11-16 02:33:03

标签: regex r

我试图在数据框中条目的第一个数字和第一个单词之后,使用R中的正则表达式提取所有信息。

例如:

Header = 
c("2006 Volvo XC70", 
"2012 Ford Econoline Cargo Van E-250 Commercial", 
"2012 Nissan Frontier", 
"2012 Kia Soul 5dr Wagon Automatic")

我想写一个能够抓住 沃尔沃XC70 Econoline Cargo Van E-250商业 的模式>(一年后的所有内容和制作)来自我的"标题"列,以便我可以在我的数据框上运行该函数并创建一个新的"模型"柱。我无法弄清楚一个模式,它允许我跳过第一个整数字符串,然后是空格,然后是第一个字符串,然后是空格,然后抓住所有进行的操作。

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:3)

只需使用sub。

sub("^\\d+\\s+\\w+\\s+", "", df$x)

示例:

x <- "2012 Ford Econoline Cargo Van E-250 Commercial"
sub("^\\d+\\s+\\w+\\s+", "", x)
# [1] "Econoline Cargo Van E-250 Commercial"

答案 1 :(得分:2)

对于此任务,我将使用 XML 包获取基本列表:

library(XML)
doc <- xmlParse('http://www.fueleconomy.gov/ws/rest/ympg/shared/menu/make')

现在我们获取了XML数据,我们可以用汽车创建一个矢量:

mk <- xpathSApply(doc, '//value', xmlValue)

最后,我将编译模式并使用sprintfsub

df$Makes <- sub(sprintf('\\d+ (?:%s) ', paste(mk, collapse='|')), '', df$Header)

输出:

##                                          Header
# 1                                2006 Volvo XC70
# 2 2012 Ford Econoline Cargo Van E-250 Commercial
# 3                           2012 Nissan Frontier
# 4              2012 Kia Soul 5dr Wagon Automatic

##                                           Makes
# 1                                           XC70
# 2           Econoline Cargo Van E-250 Commercial
# 3                                       Frontier
# 4                       Soul 5dr Wagon Automatic
相关问题