我正在尝试根据ID和日期将第二个数据集中的信息添加到第一个数据集中。如果ID匹配且“日期”在“开始”和“结束”之间,我想将颜色的值添加到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)
我遇到了以下错误:
Error in between(df1$Date, df2$start, df2$end) : Expecting a single value: [extent=355368].
需要帮助吗?
非常感谢!
更新-
非常感谢大家的答案。
我尝试了所有方法,但最终数据集的行数与第一个数据集不同。我不确定发生了什么。我发布的数据是虚构的,以类似于我正在处理的数据。是否有其他详细信息应该让您知道?我不知道从哪里开始......