2017-01-18 1 views
1

Je voudrais effectuer le rang d'un vecteur de colonne dans une matrice.R - fonction de base - Rang d'un vecteur dans une matrice, par observation

je les "données" matrice suivante

> data <- matrix (c(12,43,15,17,15,23,4,50,43,6,91,8), nrow = 4, ncol = 3)

Avec des noms et la date devrait ressembler à ceci

Date Obs  y1 y2 y3 
2014 1  12 15 43 
2014 2  43 23 6 
2013 1  15 4 91 
2013 2  17 50 8 

sortie doit être au rang d'une variable contre d'autres variables, pour chaque observation unique (date * Obs)

Date Obs  formula(y1) formula(y2) formula(y3) 
2014 1   3   2   1 
2014 2   1   2   3 
2013 1   2   3   1 
2013 2   2   1   3 

EDIT: Merci à Hoolihan et user20650 @ Tim, pour une matrice simple: t(apply(data, 1, function(x) rank(-x)))

Nous vous remercions de l'aide - d'un noob perdu.

+1

On ne sait pas sur les critères de calcul de la 'rank' – akrun

+0

Comme remarque: ceci:' 1: longueur (données [, 1]) 'se casse quand' data' est vide ou lorsque vous passez de "noob" à dplyr-user. Préférez: 'seq_len (nrow (données))' –

+1

Chrischeese, pouvez-vous expliquer en mots comment vous voulez classer les variables s'il vous plaît – user20650

Répondre

0

Utilisation Appliquer itérer sur les lignes et les classer:

> data <- matrix (c(12,43,15,17,15,23,4,50,43,6,91,8), nrow = 4, ncol = 3) 
> t(apply(data, 1, function(x) rank(-x))) 
    [,1] [,2] [,3] 
[1,] 3 2 1 
[2,] 1 2 3 
[3,] 2 3 1 
[4,] 2 1 3 
+0

Salut merci pour cela, le résultat prévu est:' t (appliquer (données, 1, fonction (x) rank (-x))) '. à votre santé. – Chrisftw

+0

@Chrischeese merci, je ne savais pas que vous étiez classement par rangée, pas de colonne. J'ai mis à jour mon exemple. Veuillez marquer comme réponse car cela résout votre problème. –