2016-04-23 101 views
3

我有一个包含观察数据的框架以及它们的制作日期。日期是从csv文件中读取的,但只包括月份和日期。 R假设他们都是从2016年开始的。我知道日期从大多数到最近都是按顺序排列的,那么我如何才能在正确的年份添加?R:更正R中日期的年份

输入按从大到小的顺序排列。

Input   Output 
1/1    1/1/2016 
12/1    12/1/2015 
11/1    11/1/2015 
1/1    1/1/2015 
12/1    12/1/2014 
1/1    1/1/2014 
12/1    12/1/2013 

谢谢你的时间!

+0

你想在2015年只更改'12/03'吗? – akrun

+0

嗨,akrun,还有更多的日期。我只是想解释一下自己。谢谢!我可以从12/03到1/01然后到11/11和11/11应该在2014 – jw123456

+1

在那种情况下,解释不清楚 – akrun

回答

2

如果数据按照OP的帖子中显示的顺序排列,我们可以使用sub从最初的vector('v1')中提取月份部分,转换为数字,得到相邻元素的差异,检查它是否更大比0,cumsum逻辑vector,使用该分组索引来传递年份值,最后是paste它与初始向量。

v2 <- paste(v1, c(2016:2013)[cumsum(c(TRUE, 
      diff(as.numeric(sub("/.*", "", v1))) > 0))], sep="/") 

如果我们需要转换为“日期”类,使用as.Date用正确的format

as.Date(v2, "%m/%d/%Y") 
#[1] "2016-01-01" "2015-12-01" "2015-11-01" "2015-01-01" "2014-12-01" 
#[6] "2014-01-01" "2013-12-01" 
+0

很好,那会更好!谢谢!如果日期需要延续到2013年,那么2013年到2010年的工作会有所变化吗? – jw123456

+0

它确实有用!谢谢! – jw123456

+0

@ jw123456是的,你可以从2016年开始使用:1800左右,它只会采用基于数值索引 – akrun