Подтвердить что ты не робот

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

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

1 2 3 
4 5 6
7 8 9

Мне нужно преобразовать в

7 8 9
4 5 6
1 2 3

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

4b9b3361

Ответ 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.