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

时间序列插值的R/Python函数有哪些?含线性插值示例及移动平均类插值咨询

我来帮你整理下R和Python里适用于时间序列插值的函数,包括你关心的移动平均类方法,先从你给出的示例数据说起:

你给出的线性插值基础示例:

Day原始x插值后x
144
2NA3
322
4NA4
5NA6
688

Python 中的时间序列插值函数

1. 线性插值(复现你的示例)

Python里最常用的线性插值工具是pandas的interpolate()方法,默认就采用线性插值逻辑,刚好可以复现你的结果:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'Day': [1, 2, 3, 4, 5, 6],
    'x': [4, None, 2, None, None, 8]
})

# 执行线性插值
df['linear_interp'] = df['x'].interpolate(method='linear')
print(df)

运行后输出的linear_interp列就是你示例中插值后的结果。

2. 移动平均类插值方法

如果你需要基于移动平均思想的插值/填充,这些方法很实用:

  • 滚动窗口均值填充:用滑动窗口内的均值来填补NA,适合平滑局部波动
# 窗口大小为3,中心对齐(优先用当前值前后的数据计算均值)
df['rolling_mean_fill'] = df['x'].fillna(
    df['x'].rolling(window=3, center=True, min_periods=1).mean()
)
  • 指数加权移动平均(EWMA)填充:对近期数据赋予更高权重,适合有趋势性的时间序列
# span=3表示加权窗口的等效大小,adjust=False保证递归计算
df['ewm_fill'] = df['x'].fillna(
    df['x'].ewm(span=3, adjust=False).mean()
)

R 中的时间序列插值函数

1. 线性插值(复现你的示例)

R里可以用基础函数approx()或者zoo包的na.approx()来实现线性插值,这里用approx()复现你的结果:

# 构造示例数据
df <- data.frame(
  Day = 1:6,
  x = c(4, NA, 2, NA, NA, 8)
)

# 执行线性插值
df$linear_interp <- approx(df$Day, df$x, xout = df$Day)$y
print(df)

输出的linear_interp列完全匹配你给出的插值结果。

2. 移动平均类插值方法

R里有不少包支持移动平均类的插值填充:

  • zoo包的移动均值填充:可以指定窗口大小和对齐方式
library(zoo)
# 用窗口大小为3的中心对齐均值填充NA
df$rolling_mean_fill <- na.aggregate(
  df$x, 
  FUN = function(x) mean(x, na.rm = TRUE), 
  k = 3, 
  align = "center"
)
  • TTR包的简单移动平均(SMA)填充:先计算移动均值,再用其填补NA
library(TTR)
# 计算窗口大小为3的简单移动平均
sma_vals <- SMA(df$x, n = 3)
# 用移动均值填充原始数据中的NA
df$sma_fill <- na.fill(df$x, sma_vals)

小总结

  • 线性插值适合趋势平稳、缺失值前后数据有明确线性关联的场景;
  • 移动平均类方法适合数据有周期性波动、需要平滑填充的场景,能避免线性插值带来的生硬趋势衔接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:38:57