R语言实现24×24矩阵/数据框拆分为含所有行列组合的5×5子集
R语言实现24×24数据框拆分所有5×5滑动子集
需求本质是步长为1的滑动窗口取数,所有可能的行/列组合即窗口每次移动1位,覆盖所有合法的5行、5列连续区间:
- 24行的场景下,合法的行起始索引范围是
1:(24-5+1)即1到20,共20种行选择 - 同理列起始索引范围也是1到20,共20种列选择
- 最终得到20×20=400个5×5的子集,全部存在列表中方便后续调用
完整代码示例
# 1. 先构造一个24×24的示例数据框,你可以替换成自己的实际数据 df <- as.data.frame(matrix(rnorm(24*24), nrow = 24, ncol = 24)) # 2. 生成所有合法的行、列起始索引组合 window_size <- 5 max_start <- nrow(df) - window_size + 1 start_combinations <- expand.grid( row_start = 1:max_start, col_start = 1:max_start ) # 3. 遍历所有组合提取5×5子集,结果存在列表中 subset_list <- lapply(1:nrow(start_combinations), function(i) { r_start <- start_combinations$row_start[i] c_start <- start_combinations$col_start[i] # 提取连续5行、5列的子集 df[r_start:(r_start + window_size - 1), c_start:(c_start + window_size - 1)] })
结果使用说明
- 所有5×5子集都保存在
subset_list列表中,总长度为400 - 访问第n个子集直接调用
subset_list[[n]]即可 - 如果需要给子集做标记,可以给列表命名,添加对应行起始、列起始的标识:
names(subset_list) <- paste0("行起始", start_combinations$row_start, "_列起始", start_combinations$col_start)
- 如果你需要非连续的5×5组合,只需要修改
start_combinations的生成逻辑即可,上述代码默认是连续滑动窗口的所有组合,符合覆盖所有可能的行、列连续组合的需求。
内容的提问来源于stack exchange,提问作者Nikolaj Poulsen
相关产品推荐
相关产品推荐

