使用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) }
关键细节解释
- 构造完整时间戳:通过
as.Date(daily$hourly$time[1])拿到当天的日期,再和"00:00:00"拼接,这样得到的是数据对应的那一天的零点,而不是系统当前日期的零点。 - 指定
interval参数:明确告诉pad()我们要按小时级补全,避免它自动推断出错。 - 正确调用
pad():pad()默认会识别数据框中名为time的列作为时间序列(如果你的时间列叫别的名字,可以用pad_cols = "你的时间列名"指定),不需要单独传入时间列。
测试你的示例数据
用你提供的那组23行的数据测试,这段代码会自动补上当天缺失的那一小时的时间戳,对应的temperature列会被设为NA(如果保留fill_by_value的话,会用你指定的值填充,建议明确写目标列名)。
这样不管当天的数据是从几点开始,都能确保补全从00:00到23:00的所有小时级时间戳,完美解决开头间隙补不上的问题。
内容的提问来源于stack exchange,提问作者adamR
相关产品推荐
相关产品推荐

