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

如何在R中将15分钟间隔的时间序列扩展为10秒间隔?

解决15分钟时间序列扩展为10秒间隔并批量填充的问题

问题背景

我有一个土壤湿度(SM)与温度(T)的时间序列数据集,原始数据时间间隔为15分钟,示例数据如下:

DateTime              SMCount      T1        T2      T3  
2023-04-24 11:45:00   3960        12.875   15.625   17.5  
2023-04-24 12:00:00   3951        13.00    15.375   17.125         
2023-04-24 12:15:00   3955        13.25    15.6875  17.5  
2023-04-24 12:30:00   3961        13.1875  14.75    15.875 

需要将其扩展为10秒间隔的时间序列,每个原始时间点的SMCount、T1、T2、T3值在对应15分钟区间内重复填充,示例效果如下:

DateTime              SMCount      T1        T2      T3  
2023-04-24 11:45:00   3960        12.875   15.625   17.5  
2023-04-24 11:45:10   3960        12.875   15.625   17.5  
2023-04-24 11:45:20   3960        12.875   15.625   17.5  
2023-04-24 11:45:30   3960        12.875   15.625   17.5 

现有代码的错误分析

尝试的两种方案均存在语法错误,核心问题是管道操作(%>%)的使用逻辑错误:

  1. 方案1错误:complete()函数内不能直接用soilmoisture$DateTime = ...赋值,管道操作会自动传递上游数据,只需指定列名;同时by = 1未明确时间单位,应指定为秒。
library(tidyr)
df <- complete(soilmoisture$DateTime = seq(from = min(soilmoisture$DateTime), to = max(soilmoisture$DateTime), by = 1)) %>%
  fill(SMCount)

报错:Error: unexpected '=' in "df %>% complete(soilmoisture$DateTime="

  1. 方案2错误:mutate()函数内不能用soilmoisture$DateTime赋值,管道操作中直接使用列名即可;seq.POSIXt的步长设为"sec"是1秒,不符合10秒的需求,且存在拼写错误Datetime(应为DateTime)。
library(tidyverse)
data <- mutate(soilmoisture$DateTime = lubridate::ymd_hms(soilmoisture$DateTime))%>%
  complete(soilmoisture$DateTime = seq.POSIXt(min(soilmoisture$Datetime), max(soilmoisture$DateTime), by="sec"))%>%
  fill(SMCount)

报错:Error: unexpected '=' in "data <- mutate(soilmoisture$DateTime ="

正确解决方案

以下是修复后的完整代码,可实现10秒间隔扩展及多列批量填充:

library(tidyverse)
library(lubridate)

# 确保DateTime列为POSIXct格式(如果原始数据不是的话)
soilmoisture <- soilmoisture %>%
  mutate(DateTime = ymd_hms(DateTime))

# 扩展时间序列并批量填充所有需要重复的列
expanded_data <- soilmoisture %>%
  # 生成10秒间隔的时间序列,覆盖原始数据的时间范围
  complete(DateTime = seq(from = min(DateTime), to = max(DateTime), by = "10 sec")) %>%
  # 批量填充SMCount、T1、T2、T3列,按向下填充(默认逻辑)
  fill(SMCount, T1, T2, T3, .direction = "down")

代码说明

  • 格式转换:用ymd_hms()将DateTime转换为POSIXct时间格式,确保时间序列操作正常执行。
  • 时间扩展:complete()函数直接指定DateTime列,生成步长为10秒的连续时间序列,管道会自动调用上游的soilmoisture数据。
  • 批量填充:fill()函数中列出所有需要填充的列,.direction = "down"表示从上到下填充,即每个原始时间点的值会填充到下一个原始时间点之前的所有10秒间隔行。

验证效果

运行代码后,expanded_data会包含10秒间隔的时间序列,每个15分钟区间内的SMCount、T1、T2、T3值与对应原始时间点的值完全一致,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:57:48