R语言生成无夏令时的UTC小时级时间序列出现重复缺失值求解
问题原因
核心问题是你生成起止时间的as.POSIXct()调用未指定时区,默认使用了系统本地时区,后续seq()的时区参数无法覆盖原始时间对象的时区属性,依旧会受本地夏令时规则影响,出现重复、跳变的时间点。
你之前把POSIXct转成字符型查重的方式也容易出错,转换过程默认会用系统本地时区格式化时间,可能和原始时间的时区不一致导致误判重复/缺失。
可行解决方案
正确生成代码
生成起止时间时就明确指定UTC时区,从根源规避夏令时影响:
# 定义起止时间,直接指定UTC时区 start_time <- as.POSIXct("2000-01-01 00:00:00", tz = "UTC") end_time <- as.POSIXct("2020-12-31 23:00:00", tz = "UTC") # 生成小时步长时间序列 Dates <- seq(from = start_time, to = end_time, by = "hour") Dates <- as.data.frame(Dates) colnames(Dates)[1] <- "DatesR"
正确性校验
可以通过两个维度确认生成的序列符合要求:
- 总时长校验:2000-2020年共21年,包含6个闰年,总小时数为
(21*365 + 6)*24 = 184104,输出序列行数应等于该值:
nrow(Dates) # 正常输出应为 184104
- 重复值校验:直接对POSIXct类型列查重即可:
sum(duplicated(Dates$DatesR)) # 正常输出应为 0,即无重复值
内容的提问来源于stack exchange,提问作者cookieonfire
相关产品推荐
相关产品推荐

