R语言如何按固定间隔提取矩阵每三行中的两行数据
R语言按固定间隔提取矩阵行操作指南
针对50行4列的测试矩阵simple,要实现每3行提取2行的效果,核心是构造符合规律的行索引,直接用R原生的矩阵索引语法就能实现,不需要额外依赖包。
首先复现测试数据:
simple <- matrix(1:300, nrow = 50, ncol = 4)
需求逻辑拆解:把连续3行作为一个分组,每个分组保留前2行、跳过第3行,也就是保留行号为1、2、4、5、7、8……的行,最后不足3行的尾部行按同样规则处理。
实现方法
方法1:取余判断过滤行号
用行号对3取余,直接排除余数为0的行(也就是每组的第3行),代码最简洁:
# 生成布尔型行索引:行号除以3余数不为0就保留 keep_flag <- seq_len(nrow(simple)) %% 3 != 0 result <- simple[keep_flag, ]
这个方法自动适配任意行数的矩阵,不需要手动计算序列终点,尾部不足3行的部分会自动按规则保留。
方法2:直接拼接目标行序列
分别生成每组第1位、第2位的行号序列,合并排序后直接索引,逻辑更直观:
# 步长为3,分别取每组的第1行、第2行 row_group1 <- seq(1, nrow(simple), by = 3) row_group2 <- seq(2, nrow(simple), by = 3) # 合并两个序列并排序,得到所有要保留的行号 keep_rows <- sort(c(row_group1, row_group2)) result <- simple[keep_rows, ]
效果校验
执行以下代码可以快速验证结果是否符合预期:
# 查看原始矩阵前6行 print("原始矩阵前6行:") head(simple, 6) # 查看提取结果前4行,应该对应原始矩阵的1、2、4、5行 print("提取结果前4行:") head(result, 4) # 查看结果总行数:50行共16个完整3行组+最后2行,总保留16*2+2=34行 print(paste0("提取结果总行数:", nrow(result)))
内容的提问来源于stack exchange,提问作者TUSTLGC
相关产品推荐
相关产品推荐

