添加两个不同大小和子集的数据框

时间:2017-08-29 00:07:24

标签: r dataframe dplyr tidyr

我有一堆看起来像这样的转换矩阵。

> 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循环,我不断迭代并检查行名和列名是否匹配。

谢谢!

1 个答案:

答案 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