2

我对 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)

现在我想要一个new.mat维度为 (R)-by-(m)mat的新n矩阵(称为下一个n元素,依此类推。这样,第一行matm数字结束。每隔一行做同样的事情mat

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

如果可能,最好避免for循环。谢谢!

4

1 回答 1

4

rowsum在这里是一个有用的功能。你将不得不做一些t转换才能得到你想要的

您需要创建一个分组向量,类似于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))
于 2013-03-14T05:37:46.003 回答