2014-12-04 38 views
2

我有以下几点:在R中改变日期时间对象的年份?

"0014-06-30" 

,我想将它更改为:

"0000-06-30" 

我将如何做到这一点的R'

我正在阅读的所有内容都非常专注于将字符串转换为日期,而不是更改日期内的元素。

回答

6
> 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" 
+0

我得到'x < - as.Date('0014-06-30'); x#[1]“14-06-30”' – akrun 2014-12-04 05:41:50

+0

@akrun有趣......我刚刚从新鲜的R会话中验证了我的输出。不知道有什么区别。 – Gregor 2014-12-04 05:44:39

+0

我也尝试过新鲜的控制台。没有不同。无论如何,加上一个方法 – akrun 2014-12-04 07:02:38

0

我无法通过转换为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" 
0

我会提供以下功能来解决两个四位数日期的混合载体(如您已已经格式化字符串为日期,如果开头的字符串):

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世纪的日期,那么当然这种方法是不可行的。

相关问题