2017-10-10 66 views
0

如果我轉換日期61年10月10日(DD.MM.YY)as.Date(date, format="%d.%m.%y")由於某種原因,將其轉換成2061 -10-10。有沒有一個優雅的方式來糾正這個問題,還是我必須通過切分字符串並在前面添加「19」來手動執行?我也嘗試了動物園包,它帶來了相同(錯誤)的結果。as.Date兩位數年

謝謝!

+2

的理由發現在'?strptime':_「沒有世紀的年份(00-99)。在輸入時,值00到68以20和69到99乘19爲前綴 - 這是2004和2008 POSIX標準指定的行爲「_ – lukeA

回答

3
x = format(as.Date("10.10.61", "%d.%m.%y"), "19%y-%m-%d") 
x = as.Date(x) 
x 
class(x) 
+0

謝謝!聰明的解決方案! –

0

如果在1900年你所有的日期,那麼你可以使用此解決方案:

library(magrittr) 
your_date = '10.10.61' 
as.Date(your_date,format="%d.%m.%y") %>% format("19%y%m%d") %>% as.Date("%Y%m%d") 
1

注意,單個sub將切片的字符串,前面加上19年,所以它不是那麼繁重:

as.Date(sub("(..)$", "19\\1", date), "%d.%m.%Y") 
## [1] "1961-10-10" 

克羅恩氏或者,克羅恩氏包默認爲30截止,因此將默認使用1961:

library(chron) 
as.Date(dates(date, format = "d.m.y")) 
## [1] "1961-10-10" 

在歷代志下一年展開規則是由默認設置爲year.expand函數和函數的默認cut.off是30.請參閱本SO發佈更多信息的"chron.year.expand"選項定義: Add correct century to dates with year provided as "Year without century", %y

相關問題