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

如何用na.approx对不规则时间间隔数据插值每日午夜值?

用na.approx估算每日00:00时刻的读数

完整实现代码

# 安装并加载所需包(首次运行时需要安装)
# install.packages(c("dplyr", "zoo"))
library(dplyr)
library(zoo)

# 原始数据集
df1 <- read.table(text = "DT   odczyt.1 odczyt.2
'2023-08-16 00:00:00'   482 1.5
'2023-08-16 23:55:00'   483 4.3
'2023-08-17 05:00:00'   484 1.6
'2023-08-17 23:59:45'   485 5.6
'2023-08-18 00:50:00'   486 1.5
'2023-08-18 23:50:45'   487 6.8
'2023-08-19 00:03:00'   586 1.5
'2023-08-19 05:09:45'   578 7.9
'2023-08-19 17:01:00'   521 11.5
'2023-08-19 18:01:15'   365 8.5
'2023-08-19 22:59:30'   490 1.8
'2023-08-19 23:59:45'   456 6.6
'2023-08-20 00:48:00'   478 1.5
'2023-08-20 03:03:00'   461 1.54
'2023-08-20 05:04:15'   397 1.6
'2023-08-20 19:07:00'   492 6.6
'2023-08-20 23:59:45'   493 3.8
'2023-08-21 01:00:00'   471 9.2
'2023-08-21 07:00:30'   493 8.5
'2023-08-21 13:21:45'   495 5.5", header = TRUE) %>% 
  mutate(DT = as.POSIXct(DT))

# 生成需要补充的每日00:00时间点
date_range <- seq.Date(from = as.Date(min(df1$DT)), to = as.Date(max(df1$DT)), by = "day")
new_times <- as.POSIXct(paste0(date_range, " 00:00:00"))
new_rows <- data.frame(DT = new_times, odczyt.1 = NA, odczyt.2 = NA)

# 合并数据并按时间排序
combined_df <- bind_rows(df1, new_rows) %>% arrange(DT)

# 执行线性插值
result_df <- combined_df %>% 
  mutate(across(c(odczyt.1, odczyt.2), ~na.approx(.x, x = DT)))

# 查看每日00:00的估算结果
result_df %>% filter(format(DT, "%H:%M:%S") == "00:00:00")

关键步骤说明

  1. 生成目标时间点:从原始数据的日期范围中,生成每天00:00的时间戳,作为需要插值的位置。
  2. 合并与排序:将原始数据和带NA值的新增时间行合并,严格按时间排序,保证插值的顺序逻辑正确。
  3. 线性插值:利用zoo包的na.approx函数,基于时间列DT对读数列进行线性插值,自动填补NA值为对应00:00时刻的估算值。

运行代码后,result_df即为包含每日00:00估算值的完整数据集,其中2023-08-17 00:00:00的odczyt.1约为483.016,odczyt.2约为4.256,与预期结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:09:55