R矩阵的行/列的部分和

时间:2016-05-10 21:31:25

标签: r matrix

有没有办法从K NxK N方阵获得K NxN矩阵和NxK N?

K:数据中的行业数量。 N:数据中的国家数量。

每行/ colname对3代码国家/地区名称进行编码,例如美国,分离器.c和行业的数量,例如USA.c1。

我尝试使用colSums和rowSums,但函数只返回一个数字而不是N个数字。

2个行业和2个国家的矩阵的最小工作示例

           BEL.c30 BEL.c31 CAN.c25 CAN.c26
   BEL.c30   11844      14       1       0
   BEL.c31      85     227       0       0
   CAN.c25       0       0    1037       1
   CAN.c26       0       0      43    1113

第一个矩阵应该是这样的(两个国家的每一行的总和):

               BEL     CAN
   BEL.c30    11858      1       
   BEL.c31      312     227              
   CAN.c25       0      1038  
   CAN.c26       0      1156

第二个矩阵应如下所示(每个国家/地区的列总和):

              BEL.c30 BEL.c31 CAN.c25 CAN.c26
      BEL    11929      241     1     0
      CAN       0         0     1080  1114

1 个答案:

答案 0 :(得分:2)

这是一个选项:

do.call(rbind, tapply(as.data.frame(m), sub("\\.c.*", "", colnames(m)), colSums))
#    BEL.c30 BEL.c31 CAN.c25 CAN.c26
#BEL   11929     241       1       0
#CAN       0       0    1080    1114

do.call(cbind, tapply(as.data.frame(t(m)), sub("\\.c.*", "", colnames(m)), colSums))
#          BEL  CAN
#BEL.c30 11858    1
#BEL.c31   312    0
#CAN.c25     0 1038
#CAN.c26     0 1156