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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:12:21