我对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),...)
循环。谢谢!
答案 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))