提问人:DJD 提问时间:9/27/2022 更新时间:9/27/2022 访问量:123
为什么我的日期在 R 中看起来相同时不等效?
Why are my dates not equivalent in R when they look identical?
问:
我在 R 中有两个日期 - 它们是通过使用 lubridate::floor_date 将其他日期四舍五入到最接近的月份开始创建的
它们在各种测试下看起来都一样......例如:
ymd(changes3$M[32]) [1] "2020-08-01" ymd(changes3$M[33]) [1] "2022-08-01"
如。POSIXct(changes3$M[33]) [1] “2022-08-01 01:00:00 BST” 如。POSIXct(changes3$M[32]) [1] “2020-08-01 01:00:00 BST”
但我不能让它们表现得等效,例如
changes3$M[32]==changes3$M[33] [1] 假
如。POSIXct(changes3$M[32])==as.POSIXct(changes3$M[33]) [1] 假
round_date(如。POSIXct(changes3$M[32],day))==round_date(as.POSIXct(changes3$M[33],day)) [1] 假
format(changes3$M[33],“%Y%M”)==format(changes3$M[32],“%Y%M”) [1] 假
可能出了什么问题?当我对它们进行测试时,这些方法工作正常 例如:
如。POSIXct(changes3$M[32])==as.POSIXct(changes3$M[32]) [1] 真
- 所以我假设它是隐藏在日期格式中的东西,我无法发现?
答:
这是 R FAQ 7.31 的变体,因为日期时间对象实际上是浮点值。格式化显示相等这一事实仅意味着 你(隐式地)截断了——你需要让它隐式截断。
> now <- Sys.time(); notnow <- Sys.time() # so microseconds apart
> format(now) == format(notnow) # "looks the same"
[1] TRUE
> trunc(now) == trunc(notnow) # "equal if truncated"
[1] TRUE
> round(now) == round(notnow) # "equal if rounded"
[1] TRUE
>
> now == notnow # but not equal numerically
[1] FALSE
>
虽然这可能有点烦人,但它实际上是一个功能,因为它提供了一些高精度的日期和时间比较。
评论