【问题标题】:R get rows between different dates where one column has date and another column has a number corresponding to +/- day windowR获取不同日期之间的行,其中一列具有日期,另一列具有对应于+/-天窗的数字
【发布时间】:2020-12-17 17:08:01
【问题描述】:

我有一张看起来像这样的桌子

dat <- data.frame(id = c(rep(1234, 8)), code = c(20600, 24567, 20600, 25067, 234456, 23456, 20600, 23356),
              date = c('04-04-2019','05-05-2019', '04-04-2019', '04-04-2019', '12-26-2019', '04-10-2019', 
                       '04-30-2019', '11-14-2019'), days=c(10,90,10,90,30,23,10,30))

我基本上对只保留 (date - days) 和 (date + days) 窗口内的行特别是 代码 20600 的窗口感兴趣,看起来像这样:

dat1 <- data.frame(id = c(rep(1234, 5)), code = c(20600, 20600, 25067,23456, 20600),
                   date = c('04-04-2019','04-04-2019', '04-04-2019', '04-10-2019', 
                            '04-30-2019'), days=c(10,10,90,23,10))

有没有办法在 R 中做到这一点?这只是较大数据集上的一个小子集,因此我想找到一种方法来应用一种解决方案,以便在我进行大规模时促进该过程。提前致谢!

【问题讨论】:

    标签: r date filtering


    【解决方案1】:

    这将在 2019 年 4 月 15 日的任一侧保持 20 天:

    dat <- data.frame(id = c(rep(1234, 8)), code = c(20600, 24567, 20600, 25067, 234456, 23456, 20600, 23356),
                      date = c('04-04-2019','05-05-2019', '04-04-2019', '04-04-2019', '12-26-2019', '04-10-2019', 
                               '04-30-2019', '11-14-2019'), days=c(10,90,10,90,30,23,10,30))
    
    dat <- dat %>% 
      mutate(date = lubridate::mdy(date)) %>% 
      filter(date %in% seq((mdy("04-15-2019")-20), (mdy("04-15-2019")+20), by=1))
    
    dat
    #     id  code       date days
    # 1 1234 20600 2019-04-04   10
    # 2 1234 24567 2019-05-05   90
    # 3 1234 20600 2019-04-04   10
    # 4 1234 25067 2019-04-04   90
    # 5 1234 23456 2019-04-10   23
    # 6 1234 20600 2019-04-30   10
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 2016-02-11
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      相关资源
      最近更新 更多