Как расположить строки в R


Часто вас может заинтересовать расположение строк фрейма данных в R в определенном порядке. К счастью, это легко сделать с помощью функцииrange () из библиотеки dplyr .

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

#create data frame
df <- data.frame(player = c('A', 'B', 'C', 'D', 'E', 'F', 'G'),
 points = c(12, 14, 14, 15, 20, 18, 29),
 assists = c(3, 5, 7, 8, 14, NA, 9))

#view data frame 
df

 player points assists
1 A 12 3
2 B 14 5
3 C 14 7
4 D 15 8
5 E 20 14
6 F 18 NA
7 G 29 9

Пример 1. Упорядочить по одному столбцу

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

library(dplyr)

df %>% arrange(points)

 player points assists
1 A 12 3
2 B 14 5
3 C 14 7
4 D 15 8
5 F 18 NA
6 E 20 14
7 G 29 9

Для сортировки по убыванию мы можем использовать функцию desc() :

df %>% arrange( desc (points))

 player points assists
1 G 29 9
2 E 20 14
3 F 18 NA
4 D 15 8
5 B 14 5
6 C 14 5
7 A 12 3

Обратите внимание, что NA будут отсортированы до конца, независимо от того, сортируете ли вы по возрастанию или по убыванию:

df %>% arrange(assists)

 player points assists
1 A 12 3
2 B 14 5
3 C 14 7
4 D 15 8
5 G 29 9
6 E 20 14
7 F 18 NA

df %>% arrange( desc (assists))

 player points assists
1 E 20 14
2 G 29 9
3 D 15 8
4 C 14 7
5 B 14 5
6 A 12 3
7 F 18 NA

Пример 2: Упорядочить по нескольким столбцам

Чтобы упорядочить строки по нескольким столбцам, мы можем просто указать больше имен столбцов в качестве аргументов:

#sort by points, then assists
df %>% arrange(points, assists)

 player points assists
1 A 12 3
2 B 14 5
3 C 14 7
4 D 15 8
5 F 18 NA
6 E 20 14
7 G 29 9

Мы также можем расположить строки по возрастанию одного столбца и по убыванию другого:

#sort by points ascending, then assists descending
df %>% arrange(points, desc (assists))

 player points assists
1 A 12 3
2 C 14 7
3 B 14 5
4 D 15 8
5 F 18 NA
6 E 20 14
7 G 29 9

Пример 3. Расположите строки в пользовательском порядке

Иногда вам также может понадобиться отсортировать строки в пользовательском порядке. Вы можете легко сделать это, используя фактор с определенными уровнями:

#sort by player with custom order
df %>% arrange( factor (player, levels = c('D', 'C', 'A', 'B', 'E', 'F', 'G')))

 player points assists
1 D 15 8
2 C 14 7
3 A 12 3
4 B 14 5
5 E 20 14
6 F 18 NA
7 G 29 9

Вы можете найти полную документацию по функцииrange() здесь .