Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
给出两位数年份时,R Lubridate返回不需要的世纪_R_Date_Datetime_Lubridate - Fatal编程技术网

给出两位数年份时,R Lubridate返回不需要的世纪

给出两位数年份时,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” 有人知道它如何返

R中,我有一个字符串向量,以两种不同的格式表示日期:

  • “月/日/年”
  • “月日,年”
  • 第一种格式的年份为两位数,因此我的向量如下所示:

    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"