【问题标题】:Generate dates 21 days before and after index date in data.table在 data.table 中生成索引日期前后 21 天的日期
【发布时间】:2020-08-05 14:01:47
【问题描述】:

我有一个包含 10,000 多个日期的数据框。例如,

indexdt
01-02-2019
08-15-2019

我需要创建一个数据框,以便在索引日期前后最多 3 周内获得一周中的同一天。生成的日期不应包含索引日期。
决赛桌

indexdt       dates
01-02-2019  12-26-2018
01-02-2019  12-19-2018
01-02-2019  12-12-2018
01-02-2019  01-09-2019
01-02-2019  01-16-2019
01-02-2019  01-23-2019
08-15-2019  07-25-2019
08-15-2019  08-01-2019
08-15-2019  08-08-2019
08-15-2019  08-22-2019
08-15-2019  08-29-2019
08-15-2019  08-05-2019

我正在寻找 data.table 解决方案。

【问题讨论】:

    标签: r data.table


    【解决方案1】:
    DT[, indexdt := as.Date(indexdt, "%m-%d-%Y")]
    DT[, .(dates = indexdt + 7 * c(-3:-1, 1:3)), by = indexdt]
    
    #        indexdt      dates
    #  1: 2019-01-02 2018-12-12
    #  2: 2019-01-02 2018-12-19
    #  3: 2019-01-02 2018-12-26
    #  4: 2019-01-02 2019-01-09
    #  5: 2019-01-02 2019-01-16
    #  6: 2019-01-02 2019-01-23
    #  7: 2019-08-15 2019-07-25
    #  8: 2019-08-15 2019-08-01
    #  9: 2019-08-15 2019-08-08
    # 10: 2019-08-15 2019-08-22
    # 11: 2019-08-15 2019-08-29
    # 12: 2019-08-15 2019-09-05
    

    如果您宁愿保留原始日期格式(作为字符串)

    DT[, .(dates = indexdt + 7 * c(-3:-1, 1:3)), by = indexdt
       ][, lapply(.SD, format, "%m-%d-%Y")]
    
    #        indexdt      dates
    #  1: 01-02-2019 12-12-2018
    #  2: 01-02-2019 12-19-2018
    #  3: 01-02-2019 12-26-2018
    #  ...
    

    数据

    DT <- data.table(
      indexdt = c("01-02-2019", "08-15-2019")
    )
    

    【讨论】:

    • 太棒了!非常感谢 Sindri_baldur!
    猜你喜欢
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 2016-04-02
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2021-03-06
    相关资源
    最近更新 更多