RStudio中两列数据多组滚动窗口t检验的高效实现方法问询
实现方案
你可以通过迭代的方式批量完成所有窗口检验,无需手动重复编写代码,以下是两种常用的R实现方案:
- 方案1:
lapply迭代(推荐,代码更简洁,结果自动存储为列表)
先定义窗口参数,再批量执行检验,所有结果会按窗口顺序存在列表中,第k个元素对应第k次(第k到k+9行)的检验结果:
# 定义窗口参数 window_size <- 10 total_times <- nrow(strip9) - window_size + 1 # 自动计算总检验次数,数据行数变化时也适用 # 批量执行检验 modified_p_list <- lapply(1:total_times, function(k) { idx <- k:(k + window_size - 1) RC_win <- RC9[idx] RM_win <- RM9[idx] coord_win <- data.frame( easting = strip9$xcoord[idx], northing = strip9$ycoord[idx] ) return(modified.ttest(RC_win, RM_win, coord_win)) })
如果需要提取所有检验的p值或其他统计量,直接遍历列表取值即可,示例如下(需根据modified.ttest实际返回的字段名调整):
# 提取所有检验的p值 all_p <- sapply(modified_p_list, function(res) res$p.value)
- 方案2:for循环实现(适合需要输出中间过程的场景)
提前初始化列表存储结果,运行效率更高:
window_size <- 10 total_times <- nrow(strip9) - window_size + 1 # 提前初始化列表,避免运行中动态扩容拖慢速度 modified_p_list <- vector("list", total_times) for (k in 1:total_times) { idx <- k:(k + window_size - 1) RC_win <- RC9[idx] RM_win <- RM9[idx] coord_win <- data.frame( easting = strip9$xcoord[idx], northing = strip9$ycoord[idx] ) modified_p_list[[k]] <- modified.ttest(RC_win, RM_win, coord_win) }
如果后续需要把所有检验结果合并为统一的数据框,可以用dplyr::bind_rows或者data.table::rbindlist批量处理列表结果。
内容的提问来源于stack exchange,提问作者Summer
相关产品推荐
相关产品推荐

