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

R语言实现数据框中10Hz时间序列上采样至100Hz并填充缺失值

在R中实现10Hz数据上采样至100Hz

针对你的需求,R中有多个包的函数可以完成上采样并填充两点间的缺失数据,下面是具体的实现步骤:

1. 数据预处理(处理欧洲格式小数)

首先需要把数据中用逗号分隔的小数转换为R支持的点分隔格式:

# 加载依赖包
library(dplyr)
library(tidyr)
library(zoo)

# 你的示例数据
df <- tibble(
  DeltaT = c("48860,7", "48860,8", "48860,9", "48861,0", "48861,1"),
  Speed = c("0,03", "0,02", "0,02", "0,02", "0,01"),
  Acc = c("-0,05", "-0,05", "-0,04", "-0,03", "-0,02"),
  HR = c("0", "0", "0", "0", "0"),
  Player = rep("Player1", 5)
)

# 转换小数格式并转为数值型
df_clean <- df %>%
  mutate(across(c(DeltaT, Speed, Acc, HR), ~ as.numeric(gsub(",", ".", .))))

2. 上采样并插值填充

使用tidyr::complete()生成100Hz采样频率的完整时间序列(间隔0.01秒),再用zoo::na.approx()对缺失值进行线性插值:

# 生成完整时间序列并插值
df_upsampled <- df_clean %>%
  group_by(Player) %>%
  # 生成从最小到最大DeltaT、间隔0.01秒的所有时间点
  complete(DeltaT = seq(min(DeltaT), max(DeltaT), by = 0.01)) %>%
  # 对连续型数值列进行线性插值
  mutate(
    Speed = na.approx(Speed),
    Acc = na.approx(Acc),
    HR = na.approx(HR)
  ) %>%
  ungroup()

关键函数说明

  • complete():自动补全指定序列的所有缺失行,这里用来扩展时间间隔,从10Hz的0.1秒间隔变为100Hz的0.01秒间隔,新增行的数值列会填充为NA。
  • na.approx():对NA值执行线性插值,适合连续变化的物理量(如速度、加速度);如果是离散型数据(如分类标签),可以改用tidyr::fill()填充最近的有效值。

针对时间戳格式的扩展

如果你的DeltaT是时间戳(而非数值型累计时间),可以用lubridate包处理:

library(lubridate)

# 假设DeltaT是时间字符串,先转为POSIXct格式
df_clean <- df_clean %>%
  mutate(DeltaT = ymd_hms(DeltaT)) # 根据实际时间格式调整函数

# 生成间隔0.01秒的时间序列并插值
df_upsampled <- df_clean %>%
  group_by(Player) %>%
  complete(DeltaT = seq(min(DeltaT), max(DeltaT), by = 0.01)) %>%
  mutate(across(c(Speed, Acc, HR), na.approx)) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:15:41