R如何补全小时降雨序列中降雨量为0的缺失时段并确认ts频率正确性
关于frequency参数的设置
你当前的ts()写法存在两处错误:
start参数仅支持传入长度为2的向量,第一个值为周期起始序号,第二个值为该周期内的偏移位置,你传入的c(1992,01,01)长度为3无法被正确识别frequency = 24*365仅适用于平年(全年8760小时),1992年为闰年总小时数为8784,即便调整为对应值,ts对象对带具体时间戳的小时级数据适配性很差,不推荐用该函数处理这类场景
正确实现方案(优先推荐tidyverse工具链)
步骤1:补全缺失时段并填充0降雨量
你可以直接用complete()函数生成完整小时序列,自动补全缺失值为0:
# 加载依赖包 library(dplyr) library(tidyr) library(lubridate) library(ggplot2) # 补全1992年全年小时序列,缺失降雨量默认填充为0 rainfall_complete <- rainfall %>% complete( V1 = seq.POSIXt(from = ymd_h("1992-01-01 00"), to = ymd_h("1992-12-31 23"), by = "hour"), fill = list(V2 = 0) )
如果你的数据不是刚好覆盖完整1992年,也可以用自动取时间范围的写法:
start_time <- min(rainfall$V1) end_time <- max(rainfall$V1) rainfall_complete <- rainfall %>% complete(V1 = seq.POSIXt(from = start_time, to = end_time, by = "hour"), fill = list(V2 = 0))
步骤2:绘制时序图
不需要转换为ts对象,直接用补全后的数据集绘图即可:
ggplot(rainfall_complete, aes(x = V1, y = V2)) + geom_line(colour = "steelblue") + labs(x = "日期时间", y = "小时降雨量", title = "1992年小时降雨量变化趋势") + theme_minimal()
若必须使用ts对象的调整方案
如果后续分析必须用到ts类型,调整写法如下:
# 1992年为闰年,frequency设为8784,start指定为1992年第1个小时 rainfall_ts <- ts(rainfall_complete$V2, start = c(1992, 1), frequency = 8784) # 绘图 plot(rainfall_ts)
内容的提问来源于stack exchange,提问作者Holly Huang
相关产品推荐
相关产品推荐

