Выбор строки с датой, ближайшей к определенной дате, в другом фрейме данных в R - PullRequest
1 голос
/ 24 сентября 2019

У меня есть два фрейма данных:

  1. 'df1' со столбцами - "ID" и "EVENT_DATE"
  ID    EVENT_DATE
  <chr> <date>    
1 ID001 2016-09-28
2 ID002 2011-03-15
3 ID003 2015-07-20
'df2' со столбцами - «ID», «X» и «X_DATE»
   ID    X     X_DATE    
   <chr> <dbl> <date>    
 1 ID001  34.5 2015-04-25
 2 ID001  30   2015-08-25
 3 ID001  50.5 2016-01-20
 4 ID001  33   2016-09-25
 5 ID001  22   2016-09-29
 6 ID002  22   2010-02-20
 7 ID002  45   2011-02-24
 8 ID002  44   2012-02-13
 9 ID003  22   2015-05-15
10 ID003  34   2015-05-30
11 ID003  34   2015-07-12
12 ID003  43   2015-07-24

Я хочу добавить «NEAREST_X_DATE» и NEAREST_X »в« df1 »для каждого идентификатора:взятие следующего из 'df2'

a) NEAREST_X_DATE = 'X_DATE, ближайший к EVENT_DATE'; NEAREST_X = 'X, соответствующий NEAREST_X_DATE'

b) NEAREST_X_DATE = 'X_DATE, ближайший кEVENT_DATE, но не позднее EVENT_DATE '; NEAREST_X =' X соответствует NEAREST_X_DATE '

Как мне продолжить это? Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 24 сентября 2019

Вот одна из возможностей:

library(dplyr)

df1$EVENT_DATE <- as.Date(df1$EVENT_DATE)
df2$X_DATE <- as.Date(df2$X_DATE)

# a

df1 %>%
  left_join(df2) %>%
  mutate(diff = difftime(EVENT_DATE, X_DATE, units = "days")) %>%
  group_by(ID) %>%
  slice(which.min(abs(diff))) %>%
  rename(NEAREST_X = X, NEAREST_X_DATE = X_DATE) %>%
  select(-diff)

# b

df1 %>%
  left_join(df2) %>%
  mutate(diff = difftime(EVENT_DATE, X_DATE, units = "days")) %>%
  group_by(ID) %>%
  filter(diff >= 0) %>%
  slice(which.min(diff)) %>%
  rename(NEAREST_X = X, NEAREST_X_DATE = X_DATE) %>%
  select(-diff)
...