Вам, вероятно, понадобится as.Date
в сопровождении формата времени, соответствующего вашим целям (format = "%m/%d"
). Затем вы можете просто проверить, находится ли каждая конкретная дата в пределах каждого временного диапазона, и вернуть соответствующий результат.
a <- read.table(text="
x date
1 03/06
1 03/15
2 12/04
3 06/23
3 10/05", header=T, stringsAsFactors=F)
b <- read.table(text="
x y start_date end_date
1 a 03/02 03/08
1 b 03/09 03/20
1 c 03/21 12/30
2 j 01/08 12/10
3 i 06/21 07/30
3 h 07/31 12/30", header=T, stringsAsFactors=F)
out <- NULL
for (i in 1:nrow(a)){
test <- (as.Date(a$date[i], format = "%m/%d") > as.Date(b$start_date, format = "%m/%d") &
as.Date(a$date[i], format = "%m/%d") < as.Date(b$end_date, format = "%m/%d") & a$x[i]==b$x)
out <- c(out, b$y[test])
}
a$y <- out
a
x date y
1 1 03/06 a
2 1 03/15 b
3 2 12/04 j
4 3 06/23 i
5 3 10/05 h