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

如何计算矩阵的每三行之和?附R语言实操示例

如何计算矩阵中每三行的总和(附R语言实现)

一、通用计算逻辑

对于任意矩阵,计算每三行总和的核心思路很直白:把矩阵按连续3行划分为一组,对每组内的对应列元素分别求和。需要注意的是,如果矩阵总行数不是3的整数倍,最后一组会包含剩余的1或2行,这时候可以根据需求选择保留这部分结果、忽略,或者补0后再求和。


二、针对你的R语言场景实现

你给出的矩阵生成代码是:

sample <- matrix(rep(1:10,times = 2),nrow = 20 , ncol = 1)

这是一个20行1列的向量型矩阵,元素是1-10重复两次。下面提供两种简洁高效的实现方法:

方法1:使用rowsum()函数(推荐)

rowsum()是R中专门用于按行分组求和的工具,我们只需要先构造分组索引,再传入函数即可:

# 生成分组索引:每3行一组,最后一组自动包含剩余的2行
group_idx <- rep(1:ceiling(nrow(sample)/3), each = 3)[1:nrow(sample)]
# 计算每三行的和
result <- rowsum(sample, group = group_idx)
# 查看结果
print(result)

运行后输出的结果对应每组的求和:

[,1]
1       6
2      15
3      24
4      13
5      12
6      21
7      19

分别对应第1-3行、4-6行……19-20行的求和结果。

方法2:使用tapply()函数

因为你的矩阵是单列(本质是向量),也可以用tapply()来实现:

result <- tapply(sample[,1], group_idx, sum)
# 转成矩阵格式(和原矩阵结构匹配)
result_matrix <- matrix(result, ncol = 1)

这个方法和方法1逻辑完全一致,输出结果也相同。


三、处理总行数不是3倍数的特殊需求

如果想忽略最后不足3行的部分,只需要把分组索引截断到3的倍数位置即可:

# 只取前18行(3*6)进行分组求和
group_idx_full <- rep(1:(nrow(sample)%/%3), each = 3)
result_full <- rowsum(sample[1:(3*(nrow(sample)%/%3)),], group = group_idx_full)

内容的提问来源于stack exchange,提问作者TUSTLGC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 00:48:11