R - 以字符、时间和日期变量为条件的嵌套 ifelse 错误
R - Error in nested ifelse conditioned on character, time and date variables
这个问题基本上是我关注的延伸 post
我遇到的问题是由于扩展中以嵌套 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)])
有没有人知道错误在哪里分别有替代的可能解决方案?提前致谢!
您用于在 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 条件更改它,它应该 运行 没问题。
这个问题基本上是我关注的延伸 post
我遇到的问题是由于扩展中以嵌套 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)])
有没有人知道错误在哪里分别有替代的可能解决方案?提前致谢!
您用于在 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 条件更改它,它应该 运行 没问题。