我有一堆看起来像这样的转换矩阵。
> temp
31-60 5-30 61-90 Current PaidOff
5-30 283 317 9 500 9
Current 0 2935 0 179989 1689
PaidOff 0 0 0 0 0
我想标准化大小,所以我使用正确的行名和列名制作了一个0矩阵:
> blankMatrix
Current 5-30 31-60 61-90 91-120 ChargeOff_Default PaidOff
Current 0 0 0 0 0 0 0
5-30 0 0 0 0 0 0 0
31-60 0 0 0 0 0 0 0
61-90 0 0 0 0 0 0 0
91-120 0 0 0 0 0 0 0
ChargeOff_Default 0 0 0 0 0 0 0
PaidOff 0 0 0 0 0 0 0
有没有办法轻松地将第一个矩阵添加到第二个矩阵。因此,例如,数字283将自动进入位置(2,3)。我希望避免一个冗长而混乱的for循环,我不断迭代并检查行名和列名是否匹配。
谢谢!
答案 0 :(得分:3)
您可以使用expand.grid
从 temp 的行名和列名创建行和列索引矩阵,然后blankMatrix[matrix index]
将从索引对中选择值矩阵指数;要更改相应索引处的值,只需为其分配值;
temp <- as.matrix(temp)
blankMatrix <- as.matrix(blankMatrix)
matIndex <- as.matrix(expand.grid(rownames(temp), colnames(temp)))
blankMatrix[matIndex] <- temp
blankMatrix
# Current X5.30 X31.60 X61.90 X91.120 ChargeOff_Default PaidOff
#Current 179989 2935 0 0 0 0 1689
#5-30 500 317 283 9 0 0 9
#31-60 0 0 0 0 0 0 0
#61-90 0 0 0 0 0 0 0
#91-120 0 0 0 0 0 0 0
#ChargeOff_Default 0 0 0 0 0 0 0
#PaidOff 0 0 0 0 0 0 0