Вы можете вычесть значения между admission_date
и chart_date
и выбрать строки с периодом от 2 до 14 дней.
library(dplyr)
df %>%
mutate_at(vars(ends_with('date')), as.Date) %>%
filter(between(admission_date - chart_date, 2, 14))
# subj_id admission_id chart_date admission_date procedure
#1 9 145834 2010-10-21 2010-10-23 surgery
#2 14 122917 2010-05-30 2010-06-10 surgery
#3 22 205461 2010-06-01 2010-06-15 surgery
#4 31 237766 2010-03-05 2010-03-08 surgery
Аналогично, в базе R:
df[3:4] <- lapply(df[3:4], as.Date)
subset(transform(df, diff_Date = admission_date - chart_date),
diff_Date >=2 & diff_Date <= 14)
данные
df <- structure(list(subj_id = c(9L, 14L, 22L, 31L, 49L, 56L, 67L),
admission_id = c(145834L, 122917L, 205461L, 237766L, 241908L,
317751L, 382211L), chart_date = structure(c(14903, 14759,
14761, 14673, 14720, 14862, 14826), class = "Date"),
admission_date = structure(c(14905,14770, 14775, 14676, 14720, 14877, 14827),
class = "Date"), procedure = structure(c(2L, 2L, 2L, 2L, 1L, 2L, 2L),
.Label = c("CT-scan", "surgery"), class = "factor")),
row.names = c(NA, -7L), class = "data.frame")