Оптимизация If Else для переменных даты в R

#r #if-statement #optimization

#r #оператор if #оптимизация

Вопрос:

Я работаю с набором данных с информацией о городах с Covid, и я хотел бы добавить переменную, если город x на дату t был в карантине, я создал код ifelse, но для имеющихся у меня 2,3 ММ наблюдений требуется много времени.

Мой набор данных выглядит следующим образом

 City     Date
a      2020-03-04    
b      2020-03-04
a      2020-03-05    
b      2020-03-05
a      2020-03-06   
b      2020-03-06 
a      2020-03-07 
b      2020-03-07 
  

И мой код таков

 library(data.table
df <- df %>% 
   mutate(quarantine = 0)
df <- df %>%
   mutate(quarantine = fifelse(City = "a",
                              fifelse(Date > as.Date("2020-03-04") amp;
                                      Date <= as.Date("2020-03-06"), 1, 0),
                              quarantine) %>%
   mutate(quarantine = fifelse(City = "b",
                              fifelse(Date > as.Date("2020-03-05") amp;
                                      Date <= as.Date("2020-03-07"), 1, 0),
                              quarantine) 
  

И это повторяется до тех пор, пока я не заполню 34 города, которые у меня есть, это действительно длинный код, но я не знаю, как его оптимизировать, потому что у каждого города своя дата для карантина, поэтому я не знаю, смогу ли я его зациклить.

Спасибо за помощь

Комментарии:

1. Где у вас есть даты карантина? Я не понимаю 2 сравнения: разве> 2020-03-05 amp; <=2020-03-06 не совпадает с == 2020-03-06? Для начала вы должны векторизовать свой код (без ifelse) и, по мере загрузки data.table , просто использовать data.table код, а не смешивать с dplyr

2. Даты карантина я взял из википедии.

3. тогда я думаю, что прежде всего вам нужно поместить их в data.frame city / quarantineStartDate / quarantineEndDate, который вы можете использовать, чтобы избежать 34 строк кода

4. А затем код для поиска, находится ли дата между этими датами?

5. да, векторизованный (без ifelses)