【问题标题】:R - Error in nested ifelse conditioned on character, time and date variablesR - 以字符、时间和日期变量为条件的嵌套 ifelse 错误
【发布时间】:2018-06-01 10:14:51
【问题描述】:

这个问题基本上是我以下帖子R - Conditional operations on time variables and dates的延伸

我遇到的问题是由于嵌套 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)])

有没有人知道分别在哪里找到错误有替代的可能解决方案?提前致谢!

【问题讨论】:

    标签: r if-statement dataframe nested difftime


    【解决方案1】:

    您在 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 条件更改它,它应该可以正常运行。

    【讨论】:

      猜你喜欢
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多