gpt4 book ai didi

r - 切换到 DST : round_date() returns NAs

转载 作者:行者123 更新时间:2023-12-04 10:09:17 25 4
gpt4 key购买 nike

2013 年,从中欧时间 (CET) 到中欧夏令时 (CEST) 的转换发生在星期日 2013-03-31。从凌晨 2 点到下午 3 点,时钟提前一小时,所以基本上没有凌晨 2 点。

start <- strptime("2013-03-31 01:00:00", format="%F %T", tz="CET")
times <- start + (0:5) * 60*15
times
[1] "2013-03-31 01:00:00 CET" "2013-03-31 01:15:00 CET"
[3] "2013-03-31 01:30:00 CET" "2013-03-31 01:45:00 CET"
[5] "2013-03-31 03:00:00 CEST" "2013-03-31 03:15:00 CEST"

将向量 times 舍入为小时得到 NA。即使是 01:30 之前的 times,也完全不受转换的影响。

library(lubridate)
round_date(times, unit = "hour")
[1] "2013-03-31 01:00:00 CET" NA
[3] NA NA
[5] NA "2013-03-31 03:00:00 CEST"

这似乎是一个错误,还是我遗漏了什么?我在运行:

sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=German_Austria.1252 LC_CTYPE=German_Austria.1252
[3] LC_MONETARY=German_Austria.1252 LC_NUMERIC=C
[5] LC_TIME=German_Austria.1252

attached base packages:
[1] stats graphics grDevices utils datasets methods base

other attached packages:
[1] lubridate_1.3.3

loaded via a namespace (and not attached):
[1] digest_0.6.4 memoise_0.2.1 plyr_1.8.1 Rcpp_0.11.2 stringr_0.6.2

最佳答案

看起来罪魁祸首是由 round_date 调用的 ceiling_date:

ceiling_date(times,"hour")
[1] "2013-03-31 01:00:00 CET" NA
[3] NA NA
[5] NA "2013-03-31 04:00:00 CEST"

查看它通过将小时加 1 来工作的代码,从而创建一个不存在的时间。这绝对是一个错误。

base::round 支持时间做你想做的事:

round(times,"hour")
[1] "2013-03-31 01:00:00 CET" "2013-03-31 01:00:00 CET"
[3] "2013-03-31 03:00:00 CEST" "2013-03-31 03:00:00 CEST"
[5] "2013-03-31 03:00:00 CEST" "2013-03-31 03:00:00 CEST"

关于r - 切换到 DST : round_date() returns NAs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24956243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com