Как сортировать по нескольким столбцам в r (с примерами)


Вы можете использовать любой из следующих методов для сортировки фрейма данных по нескольким столбцам в R:

Метод 1: используйте базу R

 df[order(-df$column1, df$column2), ]

Способ 2: используйте dplyr

 library (dplyr)

df %>%
  arrange( desc (column1), column2)

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

 #create data frame
df <- data. frame (team=c('A', 'B', 'C', 'D', 'E', 'F', 'G'),
                 points=c(90, 90, 93, 91, 91, 99, 85),
                 assists=c(33, 28, 31, 39, 34, 40, 44))

#view data frame
df

  team points assists
1 A 90 33
2 B 90 28
3 C 93 31
4 D 91 39
5 E 91 34
6 F 99 40
7 G 85 44

Метод 1: используйте базу R

Следующий код показывает, как отсортировать блок данных на основе R по убыванию точек (от наибольшего к наименьшему), а затем по возрастанию :

 #sort by points descending, then by assists ascending
df[order(-df$points, df$assists), ]

  team points assists
6 F 99 40
3 C 93 31
5 E 91 34
4 D 91 39
2 B 90 28
1 A 90 33
7 G 85 44

Обратите внимание, что строки в фрейме данных упорядочены по точкам от наибольшего к наименьшему, а затем по ассистам от наименьшего к наибольшему.

Способ 2: используйте dplyr

Следующий код показывает, как использовать функции в пакете dplyr для сортировки фрейма данных по убыванию точек (от наибольшего к наименьшему), а затем по возрастанию :

 library (dplyr)

df %>%
  arrange( desc (dots), assists)

  team points assists
1 F 99 40
2 C 93 31
3 E 91 34
4 D 91 39
5 B 90 28
6 A 90 33
7 G 85 44

Опять же, строки в фрейме данных упорядочены по точкам от наибольшего к наименьшему, а затем по ассистам от наименьшего к наибольшему.

Примечание . Полную документацию по функции Arrange() можно найти здесь .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции сортировки в R:

Как отсортировать значения по алфавиту в R
Как отсортировать кадр данных по дате в R

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *