2015-07-28 72 views
2

如何將一個向量轉換爲矩陣(二維數組),只填充第一個diagonale?如何將矢量變成具有對角填充的交叉矩陣?

x <- 1:3 
y <- array(dim=c(3,3)) 
y[x,x] <- x 
> y 
    [,1] [,2] [,3] 
[1,] 1 1 1 
[2,] 2 2 2 
[3,] 3 3 3 

,從而y,而不是變成:

 [,1] [,2] [,3] 
[1,] 1 NA NA 
[2,] NA 2 NA 
[3,] NA NA 3 

這聞起來像有一個簡單的解決方案,但我不能看到它。

感謝

回答

1

您可以嘗試

(NA^!diag(x))*diag(x) 
#  [,1] [,2] [,3] 
#[1,] 1 NA NA 
#[2,] NA 2 NA 
#[3,] NA NA 3 

或者用更少的代碼,高爾夫

x1 <- diag(x) 
x1[lower.tri(x1, diag=FALSE)|upper.tri(x1, diag=FALSE)] <- NA 

或者通過@大衛Arenburg提出另一種選擇是創建一個NA矩陣,然後填寫'x'的對角線

res <- matrix(NA, length(x), length(x)) 
diag(res) <- x 
+1

嗨,這很好,我甚至可以用「0」填充來生活,所以只是錯過了diag(x)命令。謝謝! – szeta

+1

或少一點代碼打高爾夫將是'res < - 矩陣(NA,長度(x),長度(x)); diag(res)<-x' –

+0

@szeta如果你可以用零代替NAs,你可以創建一個稀疏矩陣, – Roland