2017-08-29 68 views
3

我有一堆看起来像这样的过渡矩阵。添加两个不同大小和子集的数据帧

> 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)。我希望避免循环冗长和混乱,我经常迭代并检查行和列名称是否匹配。

谢谢!

回答

3

可以使用expand.grid创建的行和列指数从温度的行和列名的矩阵,然后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 
+0

@Psidorn:我收到'blankMatrix [matIndex] < - 温度 错误'[< - data.frame'('* TMP *',matIndex,值=列表('31-60 '= c(283L,: 替换时不支持的矩阵索引) – user1357015

+0

看起来'blankMatrix'是一个数据帧,您需要将它转换为矩阵才能工作 – Psidom

+0

任何方法都可以使用数据帧来完成此操作?临时矩阵是使用“as.data.frame.matrix”创建的 – user1357015

相关问题