если пропущено значение, где требуется ИСТИНА / ЛОЖЬ - день недели как число - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть следующий код для определения дня недели как числа из моего набора данных:

sapply(weekdays(as.Date(date), abbreviate=TRUE), 
     function(x) if(x=="Sun") 1 else 
                 if(x=="Mon") 2 else 
                 if(x=="Tue") 3 else 
                 if(x=="Wed") 4 else 
                 if(x=="Thu") 5 else 
                 if(x=="Fri") 6 else 
                 if(x=="Sat") 7 else 0)
}

Но проблема, с которой я сталкиваюсь, заключается в том, что у меня должны быть пробелы в датах, когда я пытаюсьпримените его, используя следующую формулу:

d$dow <- myweekday(d$DateTime)

R выдает эту ошибку:

Ошибка в if (x == "Sun") 1 else if (x == "Mon") 2 else if (x ==" Tue ") 3 else if (x ==: пропущенное значение, где необходимо TRUE / FALSE

Как продолжить, пожалуйста? Я попытался ввести еще одну команду ifв приведенном выше (если X == "NA") 0, но это не сработало.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 01 февраля 2019

Ваш код выглядит нормально, если не считать одиночных скобок в конце (ошибка копирования-вставки?). Вы получаете ошибку, потому что у вас, вероятно, есть пропущенные данные во входных данных;это выдает то же сообщение об ошибке

sapply(weekdays(c(Sys.time(), NA), abbreviate=TRUE), function(x) 
  if(x=="Sun") 1 else 
    if(x=="Mon") 2 else 
      if(x=="Tue") 3 else 
        if(x=="Wed") 4 else 
          if(x=="Thu") 5 else 
            if(x=="Fri") 6 else 
              if(x=="Sat") 7 else 0)

Функция дня недели выдает ошибку, если на входе есть что-то неправильное (NA или что-то, что не соответствует дате).Вам было бы лучше с функцией lubridate::wday(), которая уже обрабатывает числовые названия дней:

library(lubridate)
wday(as.Date(date))
#### [1]  6 NA

Затем вы можете заменить NA на все, что захотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...