首页 > 解决方案 > Lubridate 在 R 中将日期放在未来

问题描述

当我执行此代码时:

library(lubridate)
df$date <- format(as.Date(df$date, "%m/%d/%y") , "%Y")

一些本应在 1900 年代的日期,例如:1960,转向 2060。我不知道如何解决这个问题。我想要的日期范围是 1951 - 2014,我有大约 8000 个观察值。

标签: r

解决方案


看来您有 2 位数的年份。从?strptime

没有世纪的年份 (00–99)。输入时,值 00 到 68 以 20 为前缀,69 到 99 以 19 为前缀——这是 2004 年和 2008 年 POSIX 标准指定的行为,但他们也说“预计在未来的版本中,默认世纪是从一个 2 位数的年份会改变”。

所以从 00 到 68 的所有 2 位数年份都以 20 为前缀,因此 60 转为 2060 而不是 1960。

可以有多种方法来处理这个问题。一种方法是从年份超过 2014 年的日期中减去 100 年(因为我们知道年份的范围)。

例如,

df <- data.frame(date = c('1/12/60', '1/12/78' ,'1/1/91', '1/1/54'))
df$date <- as.Date(df$date, "%m/%d/%y")
df
#        date
#1 2060-01-12
#2 1978-01-12
#3 1991-01-01
#4 2054-01-01

inds <- as.numeric(format(df$date, "%Y")) > 2014
df$date[inds] <- df$date[inds] - lubridate::years(100)
df
#        date
#1 1960-01-12
#2 1978-01-12
#3 1991-01-01
#4 1954-01-01

推荐阅读