想象这个数据集。
library(tidyverse)
library(lubridate)
df <- data.frame(
ID = 1:10,
start_date_smoking = c("28/06/2011", "27/07/2012", "09/04/2003", "01/07/2013", "28/06/2011",
"01/09/2013", "01/09/2013", "30/08/2014", "01/09/2013", "01/09/2013"),
end_date_smoking = c("01/01/2017", "01/01/2017", "01/01/2017", "01/01/2017", "01/09/2013",
"01/09/2013", "02/09/2013", "01/01/2017", "31/08/2014", "31/08/2014")
)
df <- df %>%
mutate(
start_date_smoking =dmy(start_date_smoking),
end_date_smoking = dmy(end_date_smoking),
days = time_length(difftime(end_date_smoking, start_date_smoking),"days"))
)
如何捕获在 2013 年 9 月 1 日至 2014 年 8 月 31 日期间吸烟且吸烟至少 180 天的吸烟者/病例 (ID)。我尝试了 filter() 但无法让它工作。例如,我想捕获在 2013 年 1 月 9 日之前开始吸烟的人(例如 ID 1),因为他们在这两个日期之间吸烟。但是,我不想捕获在 2014 年 8 月 30 日开始吸烟的人(例如,ID 8),即使他们吸烟了几年,因为在 2013 年 9 月 1 日和 31 日内,他不会在 180 天内吸烟。 -08-2014 时间表。
最终,我希望它返回一个过滤为 ID 1、2、3、4、9 和 10 的 df。
我尝试这样做,但它没有过滤到我期望的行
start_range <- dmy("01/09/2013")
end_range <- dmy("31/08/2014")
df %>%
filter(days >= 180 &
(start_date_smoking >= start_range & start_date_smoking <= end_range) |
(end_date_smoking >= start_range & end_date_smoking <= end_range) |
(start_date_smoking <= start_range & end_date_smoking >= end_range))
df %>% filter(days >= 180 &
start_date_smoking <= as.Date("2013-09-01") &
end_date_smoking >= as.Date("2014-08-31")
)