2017-08-29 71 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

相關問題