У меня есть R-фрейм данных, который можно сгенерировать из кода ниже
DF <- data.frame("Person_id" = c(1,1,1,1,2,2,2,2,3,3), "Type" = c("IN","OUT","IN","ANC","IN","OUT","IN","ANC","EM","ANC"), "Name" = c("Nara","Nara","Nara","Nara","Dora","Dora","Dora","Dora","Sara","Sara"),"day_1" = c("21/1/2002","21/4/2002","21/6/2002","21/9/2002","28/1/2012","28/4/2012","28/6/2012","28/9/2012","30/06/2004","30/06/2005"),"day_2" = c("23/1/2002","21/4/2002","","","30/1/2012","28/4/2012","","28/9/2012","",""))
Я хотел бы создать два новых столбца как admit_start_date
и admit_end_date
на основе нескольких условий, которые приведено ниже
Правило 1
admit_start_date = day_1
admit_end_date = day_2 (sometimes day_2 can be NA. So refer Rule 2 below)
Правило 2
if day_2 is (null or blank or na) and Type is (Out or ANC or EM) then
admit_end_date = day_1
else (if Type is IN)
admit_end_date = day_1 + 5 (days)
Это то, что я пытаюсь, но не Кажется, это не помогает
transform_dates = function(DF){ # this function is to create 'date' columns
DF %>%
mutate(admit_start_date = day_1) %>%
mutate(admit_end_date = day_2) %>%
admit_end_date = if_else(((Type == 'Out' & admit_end_date.isna() ==True|Type == 'ANC' & admit_end_date.isna() ==True|Type == 'EM' & admit_end_date.isna() ==True),day_1,day_1 + 5)
)
}
Как вы можете видеть, я не уверен, как проверить NA
для вновь созданного столбца и заменить эти NAs
на day_1
или day_1 + 5(days)
на основе в столбце Тип.
Не могли бы вы помочь?
Я ожидаю, что мой вывод будет выглядеть так, как показано ниже
![enter image description here](https://i.stack.imgur.com/Tnjcu.png)