J'ai bien peur que la réponse de Roman Luštrik soit fausse. Il fonctionne sur cette entrée par hasard. Considérez par exemple sa sortie sur une entrée très similaire (avec une ligne supplémentaire similaire à la ligne 3 originale avec "c" dans la colonne I2) :
rum <- read.table(textConnection("P1 P2 P3 T1 T2 T3 I1 I2
2 3 5 52 43 61 6 b
6 4 3 72 NA 59 1 a
1 5 6 55 48 60 6 f
2 4 4 65 64 58 2 b
1 5 6 55 48 60 6 c"), header = TRUE)
rum$I2 <- as.character(rum$I2)
rum[order(rum$I1, rev(rum$I2), decreasing = TRUE), ]
P1 P2 P3 T1 T2 T3 I1 I2
3 1 5 6 55 48 60 6 f
1 2 3 5 52 43 61 6 b
5 1 5 6 55 48 60 6 c
4 2 4 4 65 64 58 2 b
2 6 4 3 72 NA 59 1 a
Ce n'est pas le résultat souhaité : les trois premières valeurs de I2 sont f b c
au lieu de b c f
ce qui est normal puisque le tri secondaire est I2 dans l'ordre croissant.
Pour obtenir l'ordre inverse de I2, vous voulez que les grandes valeurs soient petites et vice versa. Pour les valeurs numériques, il suffit de multiplier par -1, mais pour les caractères, c'est un peu plus délicat. Une solution générale pour les caractères/chaînes serait de passer par les facteurs, d'inverser les niveaux (pour que les grandes valeurs soient petites et les petites valeurs grandes) et de changer le facteur en caractères :
rum <- read.table(textConnection("P1 P2 P3 T1 T2 T3 I1 I2
2 3 5 52 43 61 6 b
6 4 3 72 NA 59 1 a
1 5 6 55 48 60 6 f
2 4 4 65 64 58 2 b
1 5 6 55 48 60 6 c"), header = TRUE)
f=factor(rum$I2)
levels(f) = rev(levels(f))
rum[order(rum$I1, as.character(f), decreasing = TRUE), ]
P1 P2 P3 T1 T2 T3 I1 I2
1 2 3 5 52 43 61 6 b
5 1 5 6 55 48 60 6 c
3 1 5 6 55 48 60 6 f
4 2 4 4 65 64 58 2 b
2 6 4 3 72 NA 59 1 a