2011-10-31 31 views
2

我試圖使用來自使用R.的R - 在一個矩陣排序的數據在一個單獨的矩陣

我有兩個矩陣(X)和(a不同矩陣排序的數據在矩陣數據順序使用分數據秩)。每個矩陣具有相同數量的列和行。我想重新排列矩陣(X)列中的數據,使用矩陣(列)中列的排序數據。 (X)中的第1列應使用(排名)第1列的排名數據排序。

我已經在網上搜索了幾天,並沒有拿出任何東西。我將不勝感激任何幫助。

實施例:

矩陣(X)

Col1中:A,B,C,d,E

Col2中:A,B,C,d,E

矩陣(排名)

Col1中:2,4,5,3,1

col2的:3,2,4,1,5

目標矩陣(X.rank)

Col1中:B,d,E,C,A

col2的:C,B,d,A,E

再次感謝。

+0

我想我明白了,但請爲我們提供一個可重複使用的例子,其中包括2個起始的matices和最終輸出的例子。不必很大。 –

+0

這將是類似於這樣的: –

回答

1

如果我理解你的問題正確的話,你可能會想是這樣的:

R> X <- matrix(c(1:10, (1:10)^2), 10, 2, byrow=FALSE) 
R> rank <- seq(10,1,by=-1) # simple decreasing rank 
R> X 
     [,1] [,2] 
[1,] 1 1 
[2,] 2 4 
[3,] 3 9 
[4,] 4 16 
[5,] 5 25 
[6,] 6 36 
[7,] 7 49 
[8,] 8 64 
[9,] 9 81 
[10,] 10 100 
R> X[rank,] 
     [,1] [,2] 
[1,] 10 100 
[2,] 9 81 
[3,] 8 64 
[4,] 7 49 
[5,] 6 36 
[6,] 5 25 
[7,] 4 16 
[8,] 3 9 
[9,] 2 4 
[10,] 1 1 
R> 

我不知道,如果你想單獨重新排列矩陣中的每一列。對我來說,這並沒有什麼太大意義,因爲我們通常使用行,每個觀察值和變量的列保留矩陣---所以你想保持行。

但是您可能有不同的需求,我在這裏完成的整個矩陣的操作可以按照列的方式進行,並且具有單獨的分配。

+0

我最終完成了這個工作在一個圓的方式。謝謝大家的幫助。 –

0

下面是一個例子,可以幫助你解決這個問題

# vector 
x = rnorm(5) 

# ranks 
y = sample(5) 

# sort vector based on ranks 
x[match(sort(y), y)] 

你可以用這個圍繞apply呼籲對整個矩陣的工作。請注意,這可能不是最有效的解決方案。所以如果你的矩陣很大,讓人們知道,以便解決方案可能更集中。

編輯。下面是一個擴展示例,其中包含sapply中的調用以實現矩陣的相同操作。

x = matrix(rnorm(10), ncol = 2) # original matrix to sort 
y = cbind(sample(5), sample(5)) # rank matrix for sort order 
sapply(1:NCOL(x), function(i) { 
    .x = x[,i]; .y = y[,i] 
    .x[match(sort(.y), .y)] 
})