r – 用as.Date克服Y2K

我有一个我知道过去的date列表,但forms是28/MAY/13 。 最基本的方法就是制作一个date课程

 dates <- as.Date(dates, format="%d/%b/%y") 

除date早于1968年的date以外,所有date都适用, ?as.Date页面注释:

%y没有世纪的年份(00-99)。 在input上,值00到68的前缀是20和69到99乘19 – 这是2004和2008年POSIX标准中规定的行为,但是他们也会说“在未来的版本中,一个两位数的年份将会改变。

对于这一点,Excel做得好一点,假设(在这种情况下正确),一年以上的所有事情都是1930年,但是如果可能的话,我宁愿回到1914年。 我如何要求R像过去一样解释所有date?

像这样的东西:

 Sys.setlocale("LC_TIME", "English") dates <- as.Date(c("28/MAY/13","28/MAY/14"), format="%d/%b/%y") #[1] "2013-05-28" "2014-05-28" sub100 <- function(x) { x <- as.POSIXlt(x) x$year <- x$year-100 as.Date(x) } dates[dates > as.Date("2013-12-31")] <- sub100(dates[dates > as.Date("2013-12-31")]) #[1] "2013-05-28" "1914-05-28" 

罗兰答案的一个小小的改进。 而不是有一个全新的sub100function,只需使用lubridateyearfunction。

 library(lubridate) dates <- as.Date(c("28/MAY/13","28/MAY/14"), format="%d/%b/%y") after_cut_off <- dates > as.Date("2013-12-31") dates[after_cut_off] <- dates[after_cut_off] - years(100) #this is the new bit 

也许我是密集的,但为什么不使用%Y (首都)? ?strptime ,这应该给一个世纪。

我得到了一个完美的解决scheme。

Y2K Excel问题:在使用“= YEAR()”函数进行转换的情况下,在所有版本的excel 2单词date(月 – 年)或(mon-01)中被视为1901而不是2001。 正常情况下,当我们把旧的数据库有,2字date格式下载到excel的时候就发生了。

Y2K Excel解决scheme(不是VBA) :所有(列/行)以这种date格式复制为文本,然后使用小公式将其转换为适当的年份格式(从2001年到2099年效果很好),但可以在修改后3000以及。 我相信在那之前微软提出了更好的解决scheme。

Y2K Excel公式 :C1 =“20”&RIGHT(B1,2)。 A1:原始dateB1:将date复制到文本格式C1:将其转换为正确年份的公式。