将日期与参考日期进行比较并保留最接近的日期

时间:2015-04-04 03:23:36

标签: r date

我有一个包含两列的表(学生ID和注册日期)

      ID             EnrollDate
      1332           12/21/2005
      2322           10/30/1995
      1343           05/29/1990

我有另一个包含三列(Student Id,Date1和State)的表

      ID             Date1         State
      1332           12/16/2005    MO
      1332           12/12/2005    AL
      2322           10/30/1995    AK
      1343           02/01/1990    LO
      1343           03/15/1990    LO
      1343           03/05/1990    GA  

我正在尝试基于这种逻辑创建第三个表。

  1. 检查表2中是否有重复Id的观察
  2. 如果找到具有重复Id的观察,则检查其Date1值      EnrollDate为该Id。      例如:表2中的观察1和2是重复的,因为相同的id(1332),      现在为了决定消除哪个观察,请检查此Id的Date1      (12/16/2005& 12/12/2005)与EnrollDate表1中的相同Id(1332)      (2005年12月16日)。
  3. 对于这对副本,只保留来自table2的Date1观察      最接近EnrollDate      即保留表2中的第一个观察值,因为12/16/2005更接近于      2005年12月21日

    同样,只有第五个观察结果保留在表2中,第四个和第六个观察结果保留       因为这对具有重复id(1343)的观察而被丢弃,       03/15/1990更接近于05/29/1990。

  4. 输出应该如下所示。

           ID             Date1         State
          1332           12/16/2005    MO
          2322           10/30/1995    AK
          1343           03/15/1990    LO 
    

    需要这种逻辑的帮助。

1 个答案:

答案 0 :(得分:0)

你可以尝试

library(dplyr)
left_join(df1, df2, by='ID') %>% 
             group_by(ID) %>% 
             mutate(diff=  abs(as.Date(Date1, '%m/%d/%Y')- 
                             as.Date(EnrollDate, '%m/%d/%Y'))) %>% 
             filter(diff==min(diff)) %>% 
             select(-EnrollDate, -diff)
#    ID      Date1 State
#1 1332 12/16/2005    MO
#2 2322 10/30/1995    AK
#3 1343 03/15/1990    LO