R:获取连续包含四个数字的单元格并获取此数字

时间:2017-05-22 09:18:42

标签: r split

我在R编程,我有一个像这样的数据集:

Date 
"mrt 2015"
"2012-06-22"
"2012 in Munchen"
"1998?"
"02-2012"
"02-01-1990"
..

如何连续检索四个数值(2015,2012,2012,1998,..)?

2 个答案:

答案 0 :(得分:2)

您只需要在字符串中的任意位置捕获4个数字组:

sub(".*(\\d{4}).*", "\\1", your_strings)
#[1] "2015" "2012" "2012" "1998" "2012" "1990"

说明: .*表示任何0次或更多次,然后您将要捕获的内容置于括号内(所以4位数:\\d{4})然后再次,任何内容0次或更多次(.*)。

答案 1 :(得分:1)

我们可以使用str_extract来获取数字,如果它们出现在字符串的开头,或者返回NA

library(stringr)
as.integer(str_extract(df1$Date, "^\\d{4}"))
#[1] 2015 2012 2012 1998

更新

根据OP编辑的数据集,如果4位数字出现在字符串中的任何位置,我们删除隐含字符串开头的^并仅使用模式\\d{4},即4数字数字

as.integer(str_extract(df1$Date, "\\d{4}"))
#[1] 2015 2012 2012 1998 2012 1990

请注意,这是非常具体的,即如果某个元素没有该模式,则返回NA

as.integer(str_extract(c('mrt 2015', 'mr5', '201-01', '02-01-1990', '2012'), '\\d{4}'))
#[1] 2015   NA   NA 1990 2012

base R选项为regmatches/regexpr

as.integer(regmatches(df1$Date, regexpr("\\d{4}", df1$Date)))
#[1] 2015 2012 2012 1998 2012 1990