在R中的单词模式后获取数字

在R中的单词模式后获取数字,r,regex,data.table,match,text-extraction,R,Regex,Data.table,Match,Text Extraction,我需要获取数据表列中一个单词后的数字,例如: y = data.table(status =c( "client rating 01 approved", "John Rating: 2 reproved", "Customer rating9") ) 然后,我需要获得单词rating之后的数字,并使用该评级数字创建一个新列,在示例中,它应该是:rating=c(1,2,9) 考虑到评级后的变化,如:,双空格,无空格,我该怎么做?我们可以使用sub捕获“评级”后的数字(\\d+),包括字符:或

我需要获取数据表列中一个单词后的数字,例如:

y = data.table(status =c( "client rating 01 approved", "John Rating: 2 reproved", "Customer rating9") )
然后,我需要获得单词rating之后的数字,并使用该评级数字创建一个新列,在示例中,它应该是:
rating=c(1,2,9)


考虑到评级后的变化,如:,双空格,无空格,我该怎么做?

我们可以使用
sub
捕获“评级”后的数字(
\\d+
),包括字符
或空格,并将其转换为
数字
数字
数字

library(data.table)
y[, num := as.numeric(sub(".*rating[^0-9]*(\\d+)\\b.*", "\\1",
         status, ignore.case = TRUE))]
y
#                      status num
#1: client rating 01 approved   1
#2:   John Rating: 2 reproved   2
#3:          Customer rating9   9

在这些示例中,
as.integer(gsub(“\\D”,”,status))
可以工作,但从您的问题中,我推断您还有其他示例中没有“评级”。您需要准确说明您的要求。请准确告诉我们“评级”和数字之间可能出现的内容,而不是“…如:”、双空格、无空格…”。假设您正在编写一个代码规范,其中没有“喜欢”或含糊不清的地方。(事实上,写出精确而明确的问题是编写代码规范的好方法。)如果除了字母和数字之外的零个或多个字符可以出现在“评级”和“数字”之间,考虑正则表达式<代码> Brut[^ -AZ\D] *(\D+)< /C>(不以R格式),它有一个包含数字的捕获组。如果有比赛的话。如果“评级”和数字之间可能出现的规则与我假设的不同,则相应地更改正则表达式。Gustavo,akrun提供了一个非常好的解决方案,您可能希望选择一个,但请注意,快速选择可能会阻碍其他答案,并且可能不会受到仍在研究答案的人的赞赏。关键是没有急事,只是如果你发现至少有一个答案是有用的,别忘了选择。大多数询问者在一段时间内至少会等待几个小时;有些人等待的时间要长得多,让熟睡的成员有机会回答。您可能希望添加分词以避免匹配,例如,
“grating”
。分词可能与最后一个案例有问题。我添加了
[^0-9]*