【发布时间】:2020-05-11 19:00:23
【问题描述】:
我想将 2 个数据帧中的几个字段合并到一个新数据帧中。合并数据基于 ID 和日期,并且日期必须等于或介于第二个数据帧中的开始日期和结束日期之间。
以下对类似问题的回答几乎对我有用,但是如果第一个数据帧中的日期等于第二个数据帧中的开始日期,我会得到 NA 而不是匹配的颜色。非常感谢任何有关在日期落在开始日期时包含颜色的方法的帮助。
library(tidyverse)
library(lubridate)
df1 <- data.frame(ID=c(1, 2, 2, 3),
actual.date=mdy('3/31/2017', '2/11/2016','4/10/2016','5/15/2015'))
df2 <- data.frame(ID = c(1, 1, 1, 2, 3),
start = mdy('1/1/2000', '4/1/2011', '3/31/2017', '2/11/2016', '1/12/2012'),
end = mdy('3/31/2011', '6/4/2012', '04/04/2017', '3/31/2017', '2/12/2014'),
colour = c("blue", "purple", "blue", "red", "purple"))
df <- full_join(df1, df2, by = "ID") %>%
mutate(test = ifelse(actual.date <= end & actual.date > start,
TRUE,
FALSE)) %>%
filter(test) %>%
left_join(df1, ., by = c("ID", "actual.date")) %>%
select(ID, actual.date, colour)
【问题讨论】:
-
尝试在您的
mutate通话中将actual.date > start更改为actual.date >= start。