假設我們有一個 n×4 矩陣,我們希望找到該矩陣每 2 個不同列的平均值。在組合語言中,我們基本上想要找到所有不同的方法,我們可以從 4 列中選擇 2 列并找到它們的每個平均值(或任何其他操作)。我們知道這表明了 6 種不同的組合:(1,2)、(1,3)、(1,4)、(2,3)、(2,4)、(3,4),
然后我們將繼續對 6 對中的每一對進行感興趣的操作。這個練習如何擴展到 R 中的一般 n×m 矩陣?
謝謝。
uj5u.com熱心網友回復:
這可能不是最快的方法(如標題中所要求的那樣),但這種方法清晰且靈活。
這里我假設m=4利息的計算是兩列平均值的總和:
# create example data (n-by-m matrix of values)
n <- 200
m <- 4
mat <- matrix(runif(n*m), nrow=n, ncol=m)
# get all column pairs
pairs <- t(combn(m, 2))
P <- nrow(pairs)
# allocate an "empty" vector to hold the results
result <- vector(length=P)
# loop over column pairs
for(p in 1:P) {
i <- pairs[p,1]
j <- pairs[p,2]
result[p] <- mean(mat[,i]) mean(mat[,j])
}
# view result
cbind(pairs, result)
uj5u.com熱心網友回復:
DanY 解決方案恰到好處。我建議對于一個非常大的資料集,應用函式可能會更快。DanY 解決方案,但帶有 apply() 函式:
# create example data (n-by-m matrix of values)
n <- 200
m <- 4
mat <- matrix(runif(n*m), nrow=n, ncol=m)
# get all column pairs
pairs <- t(combn(m, 2))
P <- nrow(pairs)
# allocate an "empty" vector to hold the results
result <- vector(length=P)
#apply instead
result <- apply(pairs, 1, function(x) {
mean(mat[, x[1]]) mean(mat[, x[2]])
})
# view result
cbind(pairs, result)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/383107.html
上一篇:從R中的資料集中選擇整數
