Мы можем объединить on
столбцы 'DATE' и 'ID' и присвоить (:=
) 'EVENT' в 'df1' 1
library(data.table)
setDT(df1)[df2, EVENT := 1, on = .(DATE, ID)]
Кроме того, ifelse
можно изменить на
with(df1, ifelse(DATE %in% df2$DATE & ID %in% df2$ID, 1, EVENT))
Данные
df1 <- structure(list(ID = c("300-1-003", "300-1-004", "300-1-004",
"300-1-008"), DATE = c("2019-07-14", "2019-10-27", "2019-10-29",
"2019-10-11"), EVENT = c(4L, 4L, 4L, 4L)), class = "data.frame",
row.names = c(NA, -4L))
df2 <- structure(list(ID = c("300-1-001", "300-1-002", "300-1-004",
"300-1-004", "300-1-008"), DATE = c("2019-10-22", "2019-10-02",
"2019-10-27", "2019-10-30", "2019-10-11"), EVENT = c(0L, 0L,
0L, 0L, 0L)), class = "data.frame", row.names = c(NA, -5L))