我有一个包含两列的表(学生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
我正在尝试基于这种逻辑创建第三个表。
对于这对副本,只保留来自table2的Date1观察 最接近EnrollDate 即保留表2中的第一个观察值,因为12/16/2005更接近于 2005年12月21日
同样,只有第五个观察结果保留在表2中,第四个和第六个观察结果保留 因为这对具有重复id(1343)的观察而被丢弃, 03/15/1990更接近于05/29/1990。
输出应该如下所示。
ID Date1 State
1332 12/16/2005 MO
2322 10/30/1995 AK
1343 03/15/1990 LO
需要这种逻辑的帮助。
答案 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