2017-01-05 87 views
1

Hallo我有兩個交錯循環的輸出轉換爲矩陣的麻煩。這些循環計算兩個colmumns最小值的所有組合的總和。因此,在一個3列的情況下,所有最小值1與1,1與2,1與3,2與1,2與2,...等等的總和。R:將兩個交錯循環的輸出轉換爲矩陣

此代碼向我顯示結果,這是正確的,但我怎樣才能將它轉換爲矩陣?

for (i in 1:ncol(InputMatrix1)) 
     {for (j in 1:ncol(InputMatrix1)) 
     {print(colSums(pmin(InputMatrix1[,i], InputMatrix1[,j])))} 
    } 

[1] 1 
[1] 0.6 
[1] 0.7 
[1] 0.6 
[1] 1 
[1] 0.5 
[1] 0.7 
[1] 0.5 
[1] 1 

我的目標是有一個輸出矩陣是:

 [,1] [,2]  [,3] 
[1,] 1with1 1with2 1with3 
[2,] 2with1 2with2 2with3 
[3,] 3with1 3with2 3with3 

The results for These are= 
1with1/2with2/3with3=1 
1with2/2with1=0,6 
1with3/3with1=0,5 
2with3/3with2=0,7 

我已經嘗試了很多,包括as.matrix功能,但我沒有得到期望的結果。

我真的很感謝您提供任何幫助!謝謝。

的InputMatrix1是這樣的:

    [,1]  [,2]  [,3] 
2016-12-02 0.00000000 0.000000000 0.00000000 
2016-12-05 0.00000000 0.000000000 0.00000000 
2016-12-06 0.00000000 0.000000000 0.00000000 
2016-12-07 0.00000000 0.000000000 0.00000000 
2016-12-08 0.00000000 0.000000000 0.00000000 
2016-12-09 0.03136165 0.000000000 0.08915036 
2016-12-12 0.00000000 0.016019618 0.00000000 
2016-12-13 0.00000000 0.000000000 0.00000000 
2016-12-14 0.05338029 0.114726774 0.01268025 
2016-12-15 0.17633198 0.060615604 0.26232115 
2016-12-16 0.11031648 0.085173610 0.13183337 
2016-12-19 0.11706411 0.057566360 0.09535812 
2016-12-20 0.09325712 0.006665265 0.11754523 
2016-12-21 0.09171604 0.041281630 0.05403903 
2016-12-22 0.08014103 0.067453160 0.04703658 
2016-12-23 0.05892727 0.049929460 0.04630817 
2016-12-27 0.03526304 0.018427273 0.00000000 
2016-12-28 0.11058756 0.136396545 0.13632665 
2016-12-29 0.04165344 0.140486343 0.00740110 
2016-12-30 0.00000000 0.205258358 0.00000000 
+0

你可以添加dput的'結果( InputMatrix1)'所以我們可以重現您的數據來確認我們的答案? – Tensibai

+0

您的示例代碼將失敗,因爲'colSums'需要至少兩個維度的數組。改用'sum'。 –

回答

1

輸入數據

df <- structure(list(V2 = c(0, 0, 0, 0, 0, 0.03136165, 0, 0, 0.05338029, 
0.17633198, 0.11031648, 0.11706411, 0.09325712, 0.09171604, 0.08014103, 
0.05892727, 0.03526304, 0.11058756, 0.04165344, 0), V3 = c(0, 
0, 0, 0, 0, 0, 0.016019618, 0, 0.114726774, 0.060615604, 0.08517361, 
0.05756636, 0.006665265, 0.04128163, 0.06745316, 0.04992946, 
0.018427273, 0.136396545, 0.140486343, 0.205258358), V4 = c(0, 
0, 0, 0, 0, 0.08915036, 0, 0, 0.01268025, 0.26232115, 0.13183337, 
0.09535812, 0.11754523, 0.05403903, 0.04703658, 0.04630817, 0, 
0.13632665, 0.0074011, 0)), .Names = c("V2", "V3", "V4"), class = "data.frame", row.names = c(NA, 
-20L)) 

生成矩陣來保存結果

mat <- matrix(NA, ncol(df), ncol(df)) 

環路和結果加到矩陣

for(i in 1:ncol(df)){ 
    for(j in 1:ncol(df)){ 
    mat[i,j] <- sum(pmin(df[,i], df[,j])) 
    } 
} 
0

你可以做到以下幾點: 循環前初始化一個結果矩陣,然後在循環中值分配給相應的索引。

x = matrix(rep(0, ncol(InputMatrix1) * nrow(InputMatrix1)), ncol = ncol(InputMatrix1))  
for (i in 1:ncol(InputMatrix1)) 
     {for (j in 1:ncol(InputMatrix1)) 
     {x[i, j] = (colSums(pmin(InputMatrix1[,i], InputMatrix1[,j])))} 
    } 

雖然我應該提到,這可能會更好地通過使用apply來解決。

+0

Hallo onnhoJ,謝謝你的回答,看起來非常好,但輸出矩陣應該有nxn的維數和n = InputMatrix的colmns的數量,我該如何修改你的代碼才能得到它? – EKSK