有没有办法从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
答案 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