J'ai une matrice x
avec 4 colonnes:
x <- structure(c(53L, 48L, 51L, 1012L, 59L, 55L, 27L, 27L, 21L,
1905L, 20L, 24L, 21L, 20L, 21L, 258L, 22L, 25L, 23L, 27L, 16L,
1900L, 24L, 21L), .Dim = c(6L, 4L))
J'ai une autre matrice Y
avec les mêmes dimensions:
Y <- structure(c(-9, -7, -6.25, -6.25, -6, -5.75, -9, -7, -6.25,
-6.25, -6, -5.75, -9, -7, -6.25, -6.25, -6, -5.75, -9, -7, -6.25,
-6.25, -6, -5.75), .Dim = c(6L, 4L))
Je veux classer les colonnes dans la matrice x
et sur la base de ces classements réorganiser les colonnes dans la matrice Y
. J'ai essayé de classer les colonnes dans la matrice x
:
rank1 <- rank(x, ties.method= "first") # this does not give me column by column
rank1 <- rank(x[,1], ties.method= "first") # this gives individual column only
Est-il possible pour moi de classer toutes les colonnes dans x
et et réorganiser colonne individuelle dans Y
en utilisant ce rang de x
?
Réponses:
3 pour la réponse № 1Utilisation apply
appliquer la fonction à chaque colonne:
X = matrix(rnorm(24), 6, 4)
Y = matrix(rnorm(24), 6, 4)
x.order = apply(X ,2, rank)
# alternatively, you can specify a ties method thusly:
x.order = apply(X,2, function(x){rank(x, ties.method="first")})
# now to reorder Y:
sapply(1:ncol(Y), function(i){
Y[x.order[,i],i]
}
)
2 pour la réponse № 2
Vous pouvez lier les deux matrices dans un tableau et boucler uniquement celles avec apply
:
a <- array(c(x, y), dim=c(dim(x),2))
apply(a, 2, function(m) m[,2][rank(m[,1], ties.method= "first")])
# [,1] [,2] [,3] [,4]
#[1,] -6.25 -6.25 -7.00 -6.25
#[2,] -9.00 -6.00 -9.00 -6.00
#[3,] -7.00 -7.00 -6.25 -9.00
#[4,] -5.75 -5.75 -5.75 -5.75
#[5,] -6.00 -9.00 -6.25 -6.25
#[6,] -6.25 -6.25 -6.00 -7.00