代码之家  ›  专栏  ›  技术社区  ›  gt6989b

如何减去年数?

  •  37
  • gt6989b  · 技术社区  · 14 年前

    dt = as.Date('2010/03/17')
    

    as.Date('2010-03-17')

    我该怎么做?

    5 回复  |  直到 7 年前
        1
  •  54
  •   Community Mike Causer    7 年前

    最简单的方法是将其转换为POSIXlt,并从年份槽中减去2。

    > d <- as.POSIXlt(as.Date('2010/03/17'))
    > d$year <- d$year-2
    > as.Date(d)
    [1] "2008-03-17"
    

    How to subtract days in R? .

        2
  •  85
  •   Collin    14 年前

    lubridate

    library(lubridate)
    ymd("2010/03/17") - years(2)
    
        3
  •  29
  •   rcs    14 年前

    seq :

    R> dt = as.Date('2010/03/17')
    R> seq(dt, length=2, by="-2 years")[2]
    [1] "2008-03-17"
    
        4
  •  9
  •   Hugo Silva    8 年前

    如果要考虑闰日,那么我建议使用lubridate函数减去月份,因为其他方法将返回3月1日或NA:

    > library(lubridate)
    > dt %m-% months(12*2)
    [1] "2008-03-17"
    
    # Try with leap day
    > leapdt <- as.Date('2016/02/29')
    > leapdt %m-% months(12*2)
    [1] "2014-02-28"
    
        5
  •  3
  •   Jean-Xavier Raynaud    9 年前

    与rcs的答案相同,但有可能对向量进行操作(要回答MichaelChirico,我不能评论我没有足够的rep):

    R> unlist(lapply(c("2015-12-01", "2016-12-01"), 
          function(x) { return(as.character(seq(as.Date(x), length=2, by="-1 years")[2])) }))
     [1] "2014-12-01" "2015-12-01"
    
        6
  •  2
  •   DJJ    5 年前

    dt = as.Date("2010/03/17")
    dt-365*2
    [1] "2008-03-17"
    
    as.Date("2008/02/29")-365*2
    ## [1] "2006-03-01"