Я пытаюсь добавить информацию из второго набора данных в свой первый на основе идентификатора и дат. Если идентификатор совпадает и «Дата» находится между «началом» и «концом», я хочу добавить значение для цвета в df1.
df1
ID Date
1 3/31/2017
2 2/11/2016
2 4/10/2016
3 5/15/2015
df2
ID start end colour
1 1/1/2000 3/31/2011 blue
1 4/1/2011 6/4/2012 purple
1 6/5/2012 3/31/2017 blue
2 5/1/2014 3/31/2017 red
3 1/12/2012 2/12/2014 purple
Чтобы получить такой результат:
dat
ID Date colour
1 3/31/2017 blue
2 2/11/2016 red
2 4/10/2016 red
3 5/15/2015 NA
Что можно создать с помощью кода здесь:
library(lubridate)
df1 <- tibble(ID = c(1,2,2,3), Date = mdy(c("3/31/2017","2/11/2016","4/10/2016","5/15/2015")))
df2 <- tibble(ID = c(1,1,1,2,3), start = mdy(c("1/1/2000","4/1/2011","6/5/2012","5/1/2014","1/12/2012")), end = mdy(c("3/31/2011","6/4/2012","3/31/2017","3/31/2017","2/12/2014")), colour = c("blue", "purple", "blue", "red", "purple"))
Я использовал ответ на аналогичный вопрос: Проверка наличия даты между две даты в R и использовали приведенный ниже код:
library(dplyr)
dat <- inner_join(df1, df2, by = "ID")
dat %>% rowwise() %>%
mutate(match = ifelse(between(df1$Date, df2$start, df2$end), 1 , 0))%>%
select(-c(df2$start, df2$end))%>%
arrange(df1$Date, desc(match))%>%
distinct(df1$Date)
и я получаю следующую ошибку:
Ошибка между (df1 $ Date, df2 $ start, df2 $ end): ожидается одно значение: [extension = 355368].
помощь?
Огромное спасибо!
Обновлять-
Большое спасибо всем за ваши ответы.
Я пробовал их все, но все окончательные наборы данных имеют другое количество строк, чем первый набор данных. Я не понимаю, что происходит. Данные, которые я опубликовал, составлены так, чтобы напоминать данные, с которыми я работаю. Есть ли дополнительные подробности, о которых я должен вам сообщить? Не знаю, с чего начать ...