在R中如何更改日期时间对象中的年份?

6

我有以下内容:

"0014-06-30"

我希望你能将其改为:

"0000-06-30"

我该如何在R中实现这个功能?

我所阅读的内容都非常着重于将字符串转换为日期,而不是改变日期内部的元素。

3个回答

14
> x <- as.Date('0014-06-30')
> x
[1] "0014-06-30"
> library(lubridate)
> year(x)
[1] 14
> year(x) <- 0
> x
[1] "0000-06-30"

我得到了 x <- as.Date('0014-06-30'); x#[1] "14-06-30" - akrun
@akrun 很有趣...我刚刚从一个新的R会话中验证了我的输出。不知道差别在哪里。 - Gregor Thomas
我也在新的控制台上尝试了一下,但没有任何区别。总之,这种方法还是值得肯定的。 - akrun

2

我试图通过将日期转换为as.Date来获得特定的格式,但未成功。可以考虑使用regex选项。

str1 <- "0014-06-30"
as.Date(str1)
#[1] "14-06-30"

sub('\\d{2}(?=-)', '00', str1, perl=TRUE)
#[1] "0000-06-30"

1
我会提供以下函数来修复混合的两位数和四位数日期向量(如果以字符串开头,则格式化为日期字符串):
library(lubridate)
two_dig_year_cnvt <- function(z, year=2017){
    y <- as.numeric(format(z, '%Y'))
    range <- 2017 - 2000
    year(z) <- ifelse(y >= 0 & y <= range, 2000 + y, 
                      ifelse(y > range & y <= 200, 1900 + y, y))
    z
}

对于两位数年份00-16,假设是2000年代;对于17-200年的年份,则假设是1900年代。否则,返回原始年份。如果你正在处理19世纪的日期,则当然不能使用此方法。

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