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

R语言中时间序列分类变量上采样与数据对齐技术问询

在R中实现不同采样率时间序列的对齐与分类变量上采样

针对你拥有的1000Hz连续变量和500Hz分类变量时间序列,以下是直接可行的实现方案,确保分类变量上采样至1000Hz、与连续变量对齐,同时保留原分类数据中的NA值:

核心思路

  1. 以连续变量的时间戳为基准(完整的1000Hz时间序列)
  2. 左连接分类变量数据,匹配对应时间点的分类值
  3. 向下填充分类变量的时间间隙:每个原分类值(包括NA)会覆盖到下一个分类值出现前的所有行

代码实现(基于dplyr/tidyr)

先构造示例数据(可替换为你的真实数据):

library(dplyr)
library(tidyr)

# 1000Hz连续变量数据(示例:10个时间点,间隔1ms)
df_continuous <- tibble(
  timestamp = seq(from = as.POSIXct("2024-01-01 00:00:00.000"), 
                  by = 0.001, length.out = 10),
  continuous_val = rnorm(10) # 替换为你的连续变量列
)

# 500Hz分类变量数据(示例:5个时间点,间隔2ms,包含NA)
df_categorical <- tibble(
  timestamp = seq(from = as.POSIXct("2024-01-01 00:00:00.000"), 
                  by = 0.002, length.out = 5),
  category = c("A", NA, "B", "C", NA) # 替换为你的分类变量列
)

执行对齐与上采样:

# 对齐并填充分类变量
df_aligned <- df_continuous %>%
  left_join(df_categorical, by = "timestamp") %>%
  # 向下填充,保留原NA值(遇到NA时,后续行也会填充NA)
  fill(category, .direction = "down")

大数据量场景(基于data.table)

如果数据集行数较多,用data.table会更高效:

library(data.table)
library(zoo)

setDT(df_continuous)
setDT(df_categorical)

# 左连接后填充分类变量
df_aligned <- df_continuous[df_categorical, on = "timestamp"]
df_aligned[, category := na.locf(category, na.rm = FALSE)]

结果说明

处理后的数据会满足:

  • 分类变量的行数与连续变量完全一致(1000Hz采样率)
  • 原分类变量的每个值(包括NA)会对应两个连续的行(适配500Hz→1000Hz的采样率转换)
  • 原分类数据中的NA值会被保留,对应的时间间隙也会填充NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:50:28