0
votes

I am trying to run the following if statement where the two if statement will display "Y" otherwise return "N". However I am getting the following error: Error in if (data.joined$actual goods issue date[i] > data.joined$target date[i]) { : missing value where TRUE/FALSE needed

for(i in 1:nrow(data.joined)){
  if(data.joined$`actual goods issue date`[i] > data.joined$`target date`[i]) {
    data.joined$late.delivery.test[i] <- "Y"
  } else if(is.na(data.joined$`actual goods issue date`[i]) == TRUE && today() > data.joined$`target date`[i]) {
    data.joined$late.delivery.test[i] <- "Y"
  } else {
    data.joined$late.delivery.test[i] <- "N"
  }
}
1
without a reprex it is impossible to answer but try replacing [i] for [[i]] - Bruno
If data.joined is a dataframe, you don't need a for loop because R vectorises by default. You probably want to use something like dplyr::case_when(). - Phil
After running this loop and getting this error, print out data.joined$`actual goods issue date`[i] and data.jointed$`target_date`[i]. What do you get? - Izzy
@Phil, thanks for that suggestion, I will look into case_when and see how it works out! I am quite new to R and am learning by doing, so I appreciate any suggestion! - Josh Ellis

1 Answers

0
votes

You can use if_else :

library(dplyr)
library(lubridate)

data.joined <- data.joined %>%
  mutate(late.delivery.test = if_else(`actual goods issue date` > `target date` |
         (is.na(`actual goods issue date`) & today() > `target date`), 'Y', 'N'))

Using base R :

data.joined <- transform(data.joined, 
         late.delivery.test = ifelse(`actual goods issue date` > `target date` | 
      (is.na(`actual goods issue date`) & Sys.Date() > `target date`), 'Y', 'N'))