给出两位数年份时,R Lubridate返回不需要的世纪
在R中,我有一个字符串向量,以两种不同的格式表示日期:给出两位数年份时,R Lubridate返回不需要的世纪,r,date,datetime,lubridate,R,Date,Datetime,Lubridate,在R中,我有一个字符串向量,以两种不同的格式表示日期: “月/日/年” “月日,年” 第一种格式的年份为两位数,因此我的向量如下所示: c("3/18/75", "March 10, 1994", "10/1/80", "June 15, 1979",...) 我想以标准格式将日期放入向量中。使用lubridate软件包中的mdy函数应该很容易做到这一点,除非当我将第一种格式传递给它时,它会返回一个不需要的世纪 mdy(“3/18/75”)返回“2075-03-18 UTC” 有人知道它如何返
c("3/18/75", "March 10, 1994", "10/1/80", "June 15, 1979",...)
我想以标准格式将日期放入向量中。使用lubridate
软件包中的mdy
函数应该很容易做到这一点,除非当我将第一种格式传递给它时,它会返回一个不需要的世纪
mdy(“3/18/75”)
返回“2075-03-18 UTC”
有人知道它如何返回20世纪的日期吗?也就是“1975-03-18 UTC”。对于如何使日期标准化的任何其他解决方案,我们也将不胜感激
我正在运行lubridate_1.3.3版,如果这很重要的话 您可以这样做:
some_dates <- c("3/18/75", "March 10, 1994", "10/1/80", "June 15, 1979")
dates <- mdy(some_dates)
future_dates <- year(dates) > year(Sys.Date())
year(dates[future_dates]) <- year(dates[future_dates]) - 100
某些日期您可以使用后处理功能调整世纪阈值:
library(lubridate)
dates <- c("3/18/75", "March 10, 1994", "10/1/80", "June 15, 1979", "10/19/15")
adjustCentury <- function(d, threshold=1930){
y <- year(d) %% 100
if(y > threshold %% 100) year(d) <- 1900 + y
d
}
lapply(lapply(dates, mdy), adjustCentury)
Lubridate v1.7.1没有此问题。Lubridate v1.7.4有此问题。在我们讲话时看2068很有趣as.Date(“3/18/75”,%m/%d/%y”)
返回正确的世纪。lubridate原点
也是标准的1970原点。奇怪。这是对这个问题的一个极好的回答:这不是运行lubridate v 1.7.1的问题,而是一个问题:不是真的,我可以在任何1.7.*版本中复制它。
some_dates <- c("3/18/75", "March 10, 1994", "10/1/80", "June 15, 1979")
str_replace(some_dates, '/([0-9]{2}$)', '/19\\1')
library(lubridate)
dates <- c("3/18/75", "March 10, 1994", "10/1/80", "June 15, 1979", "10/19/15")
adjustCentury <- function(d, threshold=1930){
y <- year(d) %% 100
if(y > threshold %% 100) year(d) <- 1900 + y
d
}
lapply(lapply(dates, mdy), adjustCentury)
[[1]]
[1] "1975-03-18 UTC"
[[2]]
[1] "1994-03-10 UTC"
[[3]]
[1] "1980-10-01 UTC"
[[4]]
[1] "1979-06-15 UTC"
[[5]]
[1] "2015-10-19 UTC"