如何在R中按行名汇总矩阵列?

要按行名汇总矩阵列,我们可以将colSums与sapply一起使用并转置输出。例如,如果我们有一个名为M的矩阵,则可以使用t(sapply(by(M rownames(M),,colSums),identity))完成按行名称汇总的矩阵列。

例1

考虑下面的矩阵-

> M1<-matrix(rpois(40,2),ncol=2)
> rownames(M1)<-sample(c("A","B","C","D"),20,replace=TRUE)
> M1
输出结果
  [,1] [,2]
B    4    6
D    2    1
B    1    5
C    0    0
A    2    3
B    1    0
B    5    3
D    1    3
C    0    1
C    0    2
D    1    1
B    7    2
C    2    3
C    2    3
C    2    2
C    1    2
B    1    1
C    5    3
D    2    2
D    5    2

通过行名查找M1的集合-

> t(sapply(by(M1,rownames(M1),colSums),identity))
输出结果
  V1 V2
A  2  3
B 19 17
C 12 16
D 11  9

例2

> M2<-matrix(rpois(40,10),ncol=2)
> rownames(M2)<-sample(c("S1","S2","S3"),20,replace=TRUE)
> M2
输出结果
   [,1] [,2]
S1    6   10
S3    7   11
S3   13    6
S1    9    9
S2   11    9
S3    6    8
S1    4    5
S3    8   12
S2   14    8
S3   11    7
S1   15   12
S3    8   13
S3    9   10
S1   10    8
S2   14   18
S1   13   10
S1   10    4
S3   12    7
S2    5    9
S3   13    8

通过行名找到M2的集合-

> t(sapply(by(M2,rownames(M2),colSums),identity))
输出结果
   V1 V2
S1 67 58
S2 44 44
S3 87 82