代码之家  ›  专栏  ›  技术社区  ›  Mártonka

计算data.table中两个日期之间的月份

  •  1
  • Mártonka  · 技术社区  · 7 年前

    我有一个 data.table 如下所示:

    ID   start_date   end_date
    1    2015.01.01   2016.02.01 
    2    2015.06.01   2016.03.01
    3    2016.01.01   2017.01.01
    

    ID   start_date   end_date    Months_passed
    1    2015.01.01   2016.02.01  13
    2    2015.06.01   2016.03.01   9
    3    2016.01.01   2017.01.01  12
    

    我正在尝试以下代码:

    DT[, Months_passed:= length(seq(from = start_date, to = end_date, by='month')) - 1]
    

    但我得到了一个错误

    “from”的长度必须为1“

    1 回复  |  直到 6 年前
        1
  •  7
  •   talat    7 年前

    df[, 2:3 := lapply(.SD, as.IDate, format = "%Y.%m.%d"), .SDcols = 2:3]
    

    然后,看看过去的几个月:

    df[, months_passed := lengths(Map(seq, start_date, end_date, by = "months")) -1]
    

    所以基本上你需要 Map 开始和结束日期为 seq

    结果是:

    df
    #   ID start_date   end_date months_passed
    #1:  1 2015-01-01 2016-02-01            13
    #2:  2 2015-06-01 2016-03-01             9
    #3:  3 2016-01-01 2017-01-01            12