如何计算矩阵的每三行之和?附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
相关产品推荐
相关产品推荐

