Изменение порядка строк в матрице / области данных
Мне нужно изменить / инвертировать строки в моем кадре данных, не переносить данные, а перемещать нижнюю строку вверх и так далее. Если фрейм данных был:
1 2 3 4 5 6 7 8 9
Мне нужно конвертировать в
7 8 9 4 5 6 1 2 3
Я читал о sort()
но я не думаю, что это то, что мне нужно, или я не могу найти способ.
- Поверните изображение MATLAB в изображение
- Непосредственное создание фиктивной переменной, заданной в разреженной матрице в R
- Высокочастотная фильтрация в MATLAB
- Как получить среднюю, среднюю и другую статистику по всей матрице, массиву или файлу данных?
- Функция пользовательского фильтра AngularJS
- R: Построение 3D-поверхности из x, y, z
- Все уровни фактора в модельной матрице в R
- MATLAB: Возможно ли перегрузить операторы по собственным конструкциям (ячейкам, структурам и т. Д.)?
- R управления памятью / не может выделить вектор размера n Mb
- Как разделить каждую строку матрицы на элементы вектора в R
Там, вероятно, более элегантные способы, но это работает:
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 ]