生成没有夏令时的时间序列 - r
Posted
技术标签:
【中文标题】生成没有夏令时的时间序列 - r【英文标题】:generation of time series without daylight savings - r 【发布时间】:2021-10-20 11:53:33 【问题描述】:我正在尝试生成从 2000-01-01 00:00:00 到 2020-12-31 23:00:00(每小时时间步长)的时间序列,而不考虑夏令时。其他帖子建议在将其生成为 POSIX 时使用 GMT 或 UTC。所以这就是我尝试过的:
## create date seq
Dates <- seq(as.POSIXct("2000-01-01 00:00:00"), as.POSIXct("2020-12-31 23:00:00"), by = "hour", tz='UTC')
Dates <- as.data.frame(Dates)
colnames(Dates)[1] <- "DatesR"
## check dup 2
testing <- as.character(Dates$DatesR)
dup <- as.data.frame(which(duplicated(testing))) ## not good
如您所见,重复项仍然存在。也存在跳过的值。
我也试过用zone代替tz,像这样:
## create date seq
Dates <- seq(as.POSIXct("2000-01-01 00:00:00"), as.POSIXct("2020-12-31 23:00:00"), by = "hour", zone='UTC')
Dates <- as.data.frame(Dates)
colnames(Dates)[1] <- "DatesR"
## check dup 2
testing <- as.character(Dates$DatesR)
dup <- as.data.frame(which(duplicated(testing))) ## not good
还是不行。有什么推荐吗??
【问题讨论】:
【参考方案1】:tz=
是 as.POSIXct
的参数,而不是 seq
的参数。
from <- as.POSIXct("2000-01-01 00:00:00", tz = "UTC")
to <- as.POSIXct("2020-12-31 23:00:00", tz = "UTC")
s <- seq(from, to, by = "hour")
anyDuplicated(format(s))
## [1] 0
也可以将整个会话设置为默认为 UTC。
Sys.setenv(TZ = "UTC")
Sys.timezone() # check that it has been set
## [1] "UTC"
from2 <- as.POSIXct("2000-01-01 00:00:00")
to2 <- as.POSIXct("2020-12-31 23:00:00")
s2 <- seq(from2, to2, by = "hour")
anyDuplicated(format(s2))
## [1] 0
另请注意,seq
使用默认时区实际上不会产生任何重复。是字符转换引入了重复。
Sys.setenv(TZ = "") # change back to default TZ
from3 <- as.POSIXct("2000-01-01 00:00:00")
to3 <- as.POSIXct("2020-12-31 23:00:00")
s3 <- seq(from3, to3, by = "hour")
anyDuplicated(s3)
## [1] 0
anyDuplicated(format(s3))
## [1] 7250
【讨论】:
以上是关于生成没有夏令时的时间序列 - r的主要内容,如果未能解决你的问题,请参考以下文章
在 R 中处理东部标准时间 (EST) 和东部夏令时 (EDT)