我想提取一个列引用的日期(我希望从(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;,数字)
答案 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
开头,后跟 5
或6
,因此^(21)(5|6)
。
第二个参数是替换,在这种情况下,在第一个和第二个&#34;捕获组之间放置一个0
&#34;在你的模式中。第三个参数是你想要修改的内容。