我有一个我知道的日期列表,但其格式为28/MAY/13
。从中提取日期类的最接近的方法是基本的
dates <- as.Date(dates, format="%d/%b/%y")
适用于所有日期,除了1968年之前的日期,?as.Date
页面注明:
%y
没有世纪的年份(00-99)。在输入时,值00到68的前缀为20和69到99乘以19 - 这是2004和2008 POSIX标准指定的行为,但他们也说'预计在未来的版本中,默认世纪是从两位数的年份将改变'。
Excel对此做得更好,假设(在这种情况下正确)30年以上的一切都是1930年等。但如果可能的话,我宁愿回到1914年。我如何要求R解释过去的所有日期?
答案 0 :(得分:3)
这样的事情:
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"
答案 1 :(得分:2)
罗兰答案的一个小改进。不要使用全新的sub100
函数,只需使用lubridate
的{{1}}函数。
year
答案 2 :(得分:0)
也许我很密集,但为什么不使用%Y
(大写)?在?strptime
之后,这应该给出一年的世纪。
答案 3 :(得分:0)
我找到了一个适合我的解决方案。
Y2K Excel问题: 在所有版本的excel 2字中,日期(月 - 年)或(mon-01)被视为1901而不是2001年,当使用&#34; = YEAR()&#34;功能。通常情况下,我们将具有2个字日期格式的旧数据库下载到excel中。
Y2K Excel解决方案,(不是VBA): 具有这种日期格式的所有(列/行)将其复制为文本,然后使用小公式将其转换为适当的年份格式(从2001年到2099年运行良好),但也可以在3000之后修改。我确信微软会提出更好的解决方案。
Y2K Excel公式:C1 =&#34; 20&#34;&amp; RIGHT(B1,2)。 A1:原始日期 B1:将日期复制为文本形式 C1:将其转换为正确年份的公式。