2014-12-04 36 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世紀的日期,那麼當然這種方法是不可行的。

相關問題