You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中比较小于10的时间小时数时ifelse函数为何失效?

问题根源与解决办法

你的问题出在字符类型和数值类型的比较规则差异上:

  • 你用format(as.POSIXct(ny$Start.Time),format="%H")生成的Start.Hour是字符型,不是数值型。R里字符串比较是按字符的ASCII码顺序来的:
    • 比如字符串"14"和"8"对比时,第一个字符"1"的ASCII码比"8"小,所以R会判定"14" < "8",导致所有结果都是"no";
    • 而和"10"对比时,第一个字符都是"1",接着比第二个字符"4"和"0","4"的ASCII码更大,所以判定"14" > "10",结果正常。

解决办法

有两种简单的修复方式:

1. 生成Start.Hour时直接转为数值型

修改生成Start.Hour的代码,用as.integer()把格式化后的字符串转成整数:

ny$Start.Hour <- as.integer(format(as.POSIXct(ny$Start.Time), format="%H"))

2. 判断时临时转为数值型

如果已经生成了字符型的Start.Hour,在判断条件里转成数值再比较:

方法一:用ifelse直接赋值

ny$Time.Of.Day <- ifelse(as.integer(ny$Start.Hour) > 8, "yes", "no")

方法二:先赋值再修改

ny$Time.Of.Day <- "no"
ny$Time.Of.Day[as.integer(ny$Start.Hour) > 8] <- "yes"

两种方法都能让数值比较按你预期的逻辑运行,不管和8、9还是10对比,结果都会正确。

内容的提问来源于stack exchange,提问作者Bcos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 03:43:23