关于数据框N长度子集函数执行存结果及depmixS4训练HMM的问题
我来一步步帮你解决这两个问题哈!
1. 对数据框的N长度子集运行函数,并将结果存储到列表里
这里分两种常见场景给你示例代码,你可以根据自己的需求选择:
场景1:不重叠的固定长度子集
比如把数据框按每N行切成一块,每块独立处理:
library(purrr) # 模拟示例数据框 df <- data.frame( x = 1:10, y = rnorm(10) ) N <- 3 # 你设定的子集长度 # 生成分组索引,拆分出不重叠的子集 group_ids <- ceiling(seq(nrow(df)) / N) df_subsets <- split(df, group_ids) # 对每个子集运行目标函数(这里以计算列均值为例),结果存入列表 result_list <- map(df_subsets, ~ colMeans(.x))
场景2:滑动窗口式的重叠子集
如果需要每次滑动1行取N长度的子集(比如时间序列的滑动分析):
# 生成所有滑动窗口的起始索引 start_positions <- seq(1, nrow(df) - N + 1, by = 1) # 遍历每个起始位置,提取子集并运行函数 result_sliding <- map(start_positions, function(i) { current_subset <- df[i:(i + N - 1), ] # 替换成你自己的函数,比如计算最大值、自定义统计量等 apply(current_subset, 2, max) })
2. 用depmixS4处理非连续周末数据训练HMM
你的核心问题是:每周的周末数据是连续的,但周与周之间没有时间连续性,且每周观测数不一致。这时候关键是要让HMM识别哪些观测属于同一个连续序列(同一个周末),depmixS4的group参数正好能解决这个问题!
步骤1:给数据添加序列ID
首先得给每个周末分配唯一ID,让模型知道哪些行属于同一组连续观测。假设你的数据框叫weekend_data,有day列标记周六/周日:
# 模拟你的示例数据 weekend_data <- data.frame( id = 1:9, day = c(rep("Saturday", 3), rep("Sunday", 6)), time_of_day = rep("Evening", 9), val1 = c(16.2, 23.4, 29.4, 24.2, 24.2, 24.2, 24.2, 25.4, 26.0), val2 = c(235.84, 235.29, 232.79, 233.89, 233.66, 233.38, 232.99, 233.21, 233.00) ) # 生成序列ID:当遇到周六且前一行是周日时,说明是新的周末,ID+1 weekend_data$seq_id <- 1 for (i in 2:nrow(weekend_data)) { if (weekend_data$day[i] == "Saturday" && weekend_data$day[i-1] == "Sunday") { weekend_data$seq_id[i] <- weekend_data$seq_id[i-1] + 1 } else { weekend_data$seq_id[i] <- weekend_data$seq_id[i-1] } }
如果你的数据有实际日期列(比如date),用周数分组更准确:weekend_data$seq_id <- lubridate::week(weekend_data$date),这样同一周的周末数据会自动归为一组。
步骤2:训练分组HMM
用group = seq_id告诉模型,每个seq_id对应的是一个独立的连续序列,模型会只在序列内部计算状态转移概率,不同序列之间不做连续假设:
library(depmixS4) # 构建2状态HMM,这里用val1和val2作为观测变量(默认正态分布) hmm_model <- depmix( list(val1 ~ 1, val2 ~ 1), # 观测模型:每个变量用常数项建模 data = weekend_data, nstates = 2, # 可根据需求调整状态数 group = seq_id # 关键!指定分组变量 ) # 拟合模型 fit_hmm <- fit(hmm_model) # 查看拟合结果 summary(fit_hmm)
如果你的观测变量不是正态分布(比如分类变量),可以在depmix里指定family参数,比如family = multinomial(),具体可参考depmixS4的官方文档调整。
内容的提问来源于stack exchange,提问作者John Kim
相关产品推荐
相关产品推荐

