Изменение порядка строк в матрице/области данных
Мне нужно изменить/инвертировать строки в моем кадре данных, а не переносить данные, но перемещая нижнюю строку вверх и так далее. Если фрейм данных был:
1 2 3
4 5 6
7 8 9
Мне нужно преобразовать в
7 8 9
4 5 6
1 2 3
Я читал о sort()
, но я не думаю, что это то, что мне нужно, или я не могу найти способ.
Ответы
Ответ 1
Вероятно, есть более элегантные способы, но это работает:
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
.
Ответ 2
Вы можете отменить порядок файла data.frame с помощью пакета dplyr
:
iris %>% arrange(-row_number())
Или без использования оператора трубы, выполнив
arrange(iris, -row_number())
Ответ 3
Я бы поменял строки на индекс, начинающийся с количества строк, вдоль этой строки
revdata <- thedata[dim(thedata)[1L]:1,]
Ответ 4
Мы можем изменить порядок строк .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
Ответ 5
Veeery поздно, но это, кажется, работает быстро, не нуждается в дополнительных пакетах и просто:
for(i in 1:ncol(matrix)) {matrix[,i] = rev(matrix[,i])}
Я предполагаю, что для частого использования можно было бы сделать из него функцию.
Протестировано с помощью R v = 3.3.1.