Изменение порядка строк в матрице / области данных

Мне нужно изменить / инвертировать строки в моем кадре данных, не переносить данные, а перемещать нижнюю строку вверх и так далее. Если фрейм данных был:

1 2 3 4 5 6 7 8 9 

Мне нужно конвертировать в

 7 8 9 4 5 6 1 2 3 

Я читал о sort() но я не думаю, что это то, что мне нужно, или я не могу найти способ.

Там, вероятно, более элегантные способы, но это работает:

 m <- matrix(1:9, ncol=3, byrow=TRUE) # m[rev(seq_len(nrow(m))), ] # Initial answer m[nrow(m):1, ] [,1] [,2] [,3] [1,] 7 8 9 [2,] 4 5 6 [3,] 1 2 3 

Это работает, потому что вы индексируете матрицу с инвертированной последовательностью целых чисел в качестве индекса строки. nrow(m):1 приводит к 3 2 1 .

Вы можете изменить порядок файла data.frame с dplyr пакета dplyr :

 iris %>% arrange(-row_number()) 

Или без использования оператора трубы, выполняя

 arrange(iris, -row_number()) 

Я бы поменял строки на индекс, начинающийся с количества строк, вдоль этой строки

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

Мы можем изменить порядок row.names (только для data.frame):

 # 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 

Veeery поздно, но это, кажется, работает быстро, не нуждается в дополнительных пакетах и ​​просто:

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

Я предполагаю, что для частого использования можно было бы сделать из нее функцию. Протестировано с помощью R v = 3.3.1.

Я думаю, что это самый простой способ:

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

Если вы хотите изменить столбцы, просто выполните

 MyMatrix[ , ncol(MyMatrix):1 ] 
Interesting Posts
Давайте будем гением компьютера.