R - Ошибка во вложенном ifelse, обусловленном символом, временем и датой - PullRequest
0 голосов
/ 01 июня 2018

Этот вопрос в основном является расширением моего следующего поста R - Условные операции с переменными и датами времени

Проблема, возникшая у меня из-за ошибки в расширении в формевложенный оператор ifelse (например, см. https://www.listendata.com/2017/03/if-else-in-r.html) соответственно решение @griffinevo. Предполагается, что у меня разные времена закрытия локальных бирж (один и тот же часовой пояс). Я хочу использовать вложенные операторы ifelse, чтобы иметь возможность расхождения междунесколько раз при закрытии. Проблема, однако, заключается в следующей ошибке:

     Error in ifelse(StockExchanges %in% c("Vienna"), difftime(as.POSIXct(HMS,  : 
  unused argument (ifelse(StockExchanges %in% c("Frankfurt"), difftime(as.POSIXct("22:00:00", format = "%H:%M:%S")) > 0, as.character(TimeStamp + 1), ifelse(StockExchanges %in% c("Frankfurt"), difftime(as.POSIXct("22:00:00", format = "%H:%M:%S")) > 0, as.character(TimeStamp + 1), as.character(TimeStamp))))

Кажется, что у меня есть ошибка в синтаксисе, однако я не знаю, что именно не так.

Предполагается, что у меня есть следующие 3 фондовые биржи: Вена, Франкфурт и Гамбург и другое время закрытия. Я хочу создать новую переменную TimeStampNew и увеличить день на единицу, если переменная HMS находится после критических часов закрытиянесколько фондовых бирж. Здесь первые строки фрейма данных df.

   TimeStamp      HMS StockExchange
     1: 2013-09-15 19:54:00        Vienna
     2: 2016-05-10 18:58:00        Vienna
     3: 2014-09-22 22:47:00        Hamburg
     4: 2012-01-30 18:03:00        Frankfurt
     5: 2013-05-24 08:00:00        Vienna
     6: 2013-06-07 11:45:00        Vienna
     7: 2016-11-30 12:39:00        Vienna
     8: 2007-03-28 NA              Vienna
     9: 2007-05-10 NA              Hamburg
    10: 2007-08-09 NA              Vienna
    11: 2007-11-08 NA              Frankfurt
    12: 2008-03-27 NA              Vienna

Это мойСинтаксис, приводящий к ошибке выше:

   df$TimeStampNew <-
 with(df, 
      ifelse(StockExchanges %in% c("Vienna") , 
             difftime(as.POSIXct(HMS, format = "%H:%M:%S"), 
                      as.POSIXct("17:35:00", format = "%H:%M:%S")) > 0,
             as.character(TimeStamp + 1),
      ifelse(StockExchanges %in% c("Frankfurt") , 
             difftime(as.POSIXct("22:00:00", format = "%H:%M:%S")) > 0,
             as.character(TimeStamp + 1),
      ifelse(StockExchanges %in% c("Hamburg") , 
             difftime(as.POSIXct("20:00:00", format = "%H:%M:%S")) > 0,
             as.character(TimeStamp + 1),
             as.character(TimeStamp)))))

df1$TimeStampNew[is.na(df1$HMS)] <- as.character(df1$TimeStamp[is.na(df1$HMS)])

Есть ли у кого-нибудь идеи, где ошибка может быть найдена, соответственно, есть альтернативное возможное решение?Заранее спасибо!

1 Ответ

0 голосов
/ 01 июня 2018

Синтаксис, который вы используете для указания двух условий в ifelse, неверен.Это должно быть что-то вроде

ifelse(StockExchanges %in% c("Vienna") & 
         difftime(as.POSIXct(HMS, format = "%H:%M:%S"),
                  as.POSIXct("17:35:00", format = "%H:%M:%S")) > 0,
         as.character(TimeStamp + 1),

, т.е. два условия должны быть разделены символом &, а не запятой.Просто измените это для всех условий ifelse, и оно должно работать нормально.

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