计算R中矩阵中的块数量

时间:2013-03-14 05:28:27

标签: r

我对R中的数据操作有一个非常笼统的问题,我正在寻求一种方便快捷的方法。假设我有一个维(R)-by-(nxm)矩阵,即R行和n列m列。

set.seed(999)
n = 5; m = 10; R = 100
ncol = m*n
mat = matrix(rnorm(n*m*R), nrow=R, ncol=ncol)

现在我想要一个维度(R)-by-(m)的新矩阵(称之为new.mat),即给定某一行mat,我想计算一个数字(例如总和)表示第一个n元素,然后是下一个n元素的数字,依此类推。这样,mat的第一行最后会有m个数字。对mat的每一行都做同样的事情。

对于上面的给定示例,新矩阵new.mat的第1行的第1个元素应为sum(mat[1,1:5]),第2个元素为sum(mat[1,6:10]),最后一个元素为{{ 1}}。 sum(mat[1,46:50])的第二行是new.mat

如果可能,首选避免(sum(mat[2,1:5]), sum(mat[2,6:10),...)循环。谢谢!

1 个答案:

答案 0 :(得分:4)

rowsum在这里是一个有用的功能。你必须做一些t ransposing才能得到你想要的东西

您需要创建类似c(1,1,1,1,1,2,2,2,2,2,....,10,10,10,10,10)

的分组矢量
grp <- rep(seq_len(ceiling(ncol(mat)/5)), each = 5, length.out = ncol(mat))
# this will also work, but may be less clear why.
# grp <- (seq_len(ncol(mat))-1) %/%5   

rowsum计算分组变量每个级别的类数字矩阵对象的行的列和数

您正在寻找列之间的行总和,因此您必须转置结果(以及您的输入)

 t(rowsum(t(mat),grp))