web-dev-qa-db-fra.com

Changer la commande de ligne dans une matrice / Dataframe

J'ai besoin de changer/d'inverser des lignes dans ma trame de données, de ne pas transposer les données, mais déplacez la rangée inférieure vers le haut et ainsi de suite. Si le cadre de données était:

1 2 3 
4 5 6
7 8 9

J'ai besoin de convertir en

7 8 9
4 5 6
1 2 3

J'ai lu environ sort() mais je ne pense pas que ce soit ce dont j'ai besoin ou que je ne suis pas capable de trouver le chemin.

25
pacomet

Vous pouvez inverser l'ordre d'une donnée. En utilisant le package dplyr:

iris %>% arrange(-row_number())

Ou sans utiliser le tuyau-opérateur en faisant

arrange(iris, -row_number())
27
Holger Brandl

Je renverserais les rangées un indice commençant par le nombre de lignes, le long de cette ligne

revdata <-  thedata[dim(thedata)[1L]:1,]
7
Henrik

Je pense que c'est le moyen le plus simple:

MyMatrix = matrix(1:20, ncol = 2)
MyMatrix[ nrow(MyMatrix):1, ]

Si vous voulez inverser les colonnes, faites juste

MyMatrix[ , ncol(MyMatrix):1 ]
4
Rtist

Nous pouvons inverser l'ordre de rangée.Names (pour Data.frame uniquement):

# create data.frame
m <- matrix(1:9, ncol=3, byrow=TRUE)
df_m <- data.frame(m)

#reverse
df_m[rev(rownames(df_m)), ]

#   X1 X2 X3
# 3  7  8  9
# 2  4  5  6
# 1  1  2  3
4
zx8754

Veeery tard, mais cela semble fonctionner rapidement, n'a pas besoin de packages supplémentaires et est simple:

for(i in 1:ncol(matrix)) {matrix[,i] = rev(matrix[,i])}

Je suppose que pour une utilisation fréquente, on en ferait une fonction. Testé avec R V = 3.3.1.

2
theogrost