从引用中提取日期

时间:2017-07-11 15:02:38

标签: r date extract

我想提取一个列引用的日期(我希望从(21510000XXX - > 10/2015)传递。问题是,2015年和2016年的参考不同于2017年。

就像那样:

DF<-c(21612000675, 21612000494, 20170100011, 21507000583, 21508000306)
  

DF   [1] 21612000675 21612000494 20170100011 21507000583 21508000306

第一个是2016年,第12个月(&#34; 216&#34;,&#34; 12&#34;数字)),第三个是不同的2017年,所以2017年,01月( &#34; 2017&#34;,&#34; 01&#34;,number),最后一个,2015年,与2016年相同,所以2015年08月(&#34; 2015&#34; ,&#34; 08&#34;,数字)

2 个答案:

答案 0 :(得分:1)

试试这个!

library(dplyr)
library(stringr)

ym <- str_extract(DF, '^(215|216|2017)[0-9]{2}') %>%
        gsub(pattern = '^215', replacement = '2015') %>%
        gsub(pattern = '^216', replacement = '2016') %>%
        gsub(pattern = '(20[0-9]{2})', replacement = '\\1\\/')
> ym
[1] "2016/12" "2016/12" "2017/01" "2015/07" "2015/08"

编辑:

如果你想在几年前尝试:

ym <- str_extract(DF, '^(215|216|2017)[0-9]{2}') %>%
        gsub(pattern = '^215', replacement = '2015') %>%
        gsub(pattern = '^216', replacement = '2016') %>%
        gsub(pattern = '(20[0-9]{2})([0-9]{2})', replacement = '\\2\\/\\1')
> ym
[1] "12/2016" "12/2016" "01/2017" "07/2015" "08/2015"

答案 1 :(得分:0)

您可以尝试使模式保持一致。例如,

gsub("^(21)(5|6)", "\\10\\2", DF)
> [1] "210612000675" "210612000494" "20170100011"  "210507000583" "210508000306"

看看?gsub

第一个参数是要匹配的模式,在这种情况下,任何字符串字符串21开头,后跟 56,因此^(21)(5|6)

第二个参数是替换,在这种情况下,在第一个和第二个&#34;捕获组之间放置一个0&#34;在你的模式中。第三个参数是你想要修改的内容。