2011-10-31 29 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)] 
})