我在R编程,我有一个像这样的数据集:
Date
"mrt 2015"
"2012-06-22"
"2012 in Munchen"
"1998?"
"02-2012"
"02-01-1990"
..
如何连续检索四个数值(2015,2012,2012,1998,..)?
答案 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