You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:48:04