首页 文章

查找最接近行特定日期的日期

提问于
浏览
-10

我有以下数据帧:

enter image description here

第1列包含标识号(respnr)第2列包含每个标识号的参考日期(cdatalg)第3列到第16列包含日期(datesc1:datesc14)

我希望进入第17列,其中第3列第16列的日期打印最接近第2列中的参考日期 . 我已尝试过apply和which.min和neardate的组合,但无法弄清楚 .

推动正确的方向将非常受欢迎 .

1 回答

  • 0

    这个简单的例子将帮助您:

    # example data
    df = data.frame(id = c("A","B"),
                    date_ref = c("2013-01-26", "2013-01-08"),
                    date1 = c("2013-01-23", "2013-01-01"),
                    date2 = c("2013-01-20", "2013-01-07"),
                    stringsAsFactors = F)
    
    df
    
    #   id   date_ref      date1      date2
    # 1  A 2013-01-26 2013-01-23 2013-01-20
    # 2  B 2013-01-08 2013-01-01 2013-01-07
    
    library(dplyr)
    library(lubridate)
    library(tidyr)
    
    # update date column to datetime variables
    # (if needed)
    df = df %>% mutate_at(vars(matches("date")), ymd)
    
    df %>%
      gather(type,date_new,-id,-date_ref) %>%        # reshape dataset
      group_by(id) %>%                               # for each id
      filter(abs(difftime(date_ref, date_new)) == min(abs(difftime(date_ref, date_new)))) %>%  # keep row with minimum distance between dates
      ungroup() %>%                                  # forget the grouping
      select(-type) %>%                              # remove that variable
      inner_join(df, by=c("id","date_ref"))          # join back original dataset
    
    # # A tibble: 2 x 5
    #      id   date_ref   date_new      date1      date2
    #   <chr>     <date>     <date>     <date>     <date>
    # 1     A 2013-01-26 2013-01-23 2013-01-23 2013-01-20
    # 2     B 2013-01-08 2013-01-07 2013-01-01 2013-01-07
    

    不确定您是否可以使用相同距离的多个日期(相同日期是基线日期之前/之后相同天数的多次)以及您希望如何处理它们 .

相关问题