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

使用Padr包Pad函数填充时间序列间隙的技术求助

解决padr包pad函数补全日小时级时间序列的开头间隙问题

看起来你遇到的核心问题是没有给pad()函数提供完整的日期时间作为起始/结束值,只传'00:00:00'会让R默认把它解析成当前系统日期的零点,而不是你数据对应的那一天的零点,自然没法补全当天开头的时间间隙。另外你的pad()调用方式也有点小问题,第一个参数应该直接传数据框,不需要单独传入时间列。

修正后的解决方案

我们需要先从现有数据中提取当天的日期,构造出当天00:00:00和23:00:00的完整时间戳,再传给pad()函数,同时指定补全的频率为小时级:

# 先处理当天的时间范围:从数据中提取日期,构造完整的起始和结束时间
current_date <- as.Date(daily$hourly$time[1])
start_time <- as.POSIXct(paste(current_date, "00:00:00"))
end_time <- as.POSIXct(paste(current_date, "23:00:00"))

# 补全时间序列
if (nrow(daily$hourly) < 24) { 
  daily$hourly <- daily$hourly %>% 
    pad(interval = "hour", start_val = start_time, end_val = end_time) %>% 
    # 如果需要填充NA的话可以用fill_by_value,不需要就去掉这行
    fill_by_value(temperature) 
}

关键细节解释

  1. 构造完整时间戳:通过as.Date(daily$hourly$time[1])拿到当天的日期,再和"00:00:00"拼接,这样得到的是数据对应的那一天的零点,而不是系统当前日期的零点。
  2. 指定interval参数:明确告诉pad()我们要按小时级补全,避免它自动推断出错。
  3. 正确调用pad():pad()默认会识别数据框中名为time的列作为时间序列(如果你的时间列叫别的名字,可以用pad_cols = "你的时间列名"指定),不需要单独传入时间列。

测试你的示例数据

用你提供的那组23行的数据测试,这段代码会自动补上当天缺失的那一小时的时间戳,对应的temperature列会被设为NA(如果保留fill_by_value的话,会用你指定的值填充,建议明确写目标列名)。

这样不管当天的数据是从几点开始,都能确保补全从00:00到23:00的所有小时级时间戳,完美解决开头间隙补不上的问题。

内容的提问来源于stack exchange,提问作者adamR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:43:16