R:在R中更正日期的年份

3

我有一个数据框,其中包含观测值和它们被记录的日期。这些日期是从csv文件中读取的,但只包括月份和日期。R假设它们都来自2016年。我知道这些日期按照最近到最早的顺序排列,那么我该如何添加正确的年份呢?

输入的日期是按照从最近到最早的顺序排列的。

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

感谢您的时间!

你想仅将12/03更改为2015吗? - akrun
嗨,akrun,还有许多日期。我只是试图解释自己。谢谢!我可以从12/03到1/01,然后到11/11,而11/11应该在2014年。 - jw123456
1
在这种情况下,解释不够清楚。 - akrun
最好展示一系列日期和预期输出。 - akrun
1个回答

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

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"

运行得非常好!谢谢!如果日期需要超过2013年,将2013年更改为2010年是否有效? - jw123456
@jw123456 是的,你可以使用从2016:1800或者更高版本,它只会根据数字索引获取值。 - akrun
1
谢谢你的帮助! - jw123456

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接