2016-05-10 38 views
1

有没有办法从一个矩阵中获得一个K×N×N矩阵和一个N×K×N = K×N/K×N/K×N/K×N/K×N/K×K/R矩阵的行/列的部分总和

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

每行/列名都将3代码国家名称编码,例如USA,分离器.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 

回答

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