Dplyr Упорядочить ряды DF по их частоте в столбце - PullRequest
1 голос
/ 06 апреля 2020

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

x y group
3 2 z
1 1 z
2 2 z
3 3 a
1 2 a
3 3 a
1 1 b
2 2 b
2 2 b
1 1 g
1 1 g
1 1 g
1 1 g
1 1 g

У меня следующий код:

df %>% group_by(group) %>% arrange(desc(group))

Но это не дает мне желаемых результатов.

1 Ответ

1 голос
/ 06 апреля 2020

Мы можем изменить порядок, выполнив сначала arrange, а затем выполнить группировку

library(dplyr)
df %>%
    arrange(desc(group)) %>%
    group_by(group)
# A tibble: 14 x 3
# Groups:   group [4]
#       x     y group
#   <int> <int> <chr>
# 1     3     2 z    
# 2     1     1 z    
# 3     2     2 z    
# 4     1     1 g    
# 5     1     1 g    
# 6     1     1 g    
# 7     1     1 g    
# 8     1     1 g    
# 9     1     1 b    
#10     2     2 b    
#11     2     2 b    
#12     3     3 a    
#13     1     2 a    
#14     3     3 a  

Если нам нужно упорядочить данные по частоте, создайте столбец подсчетов с помощью add_count используйте arrange со значениями на основе 'n' и удалите этот столбец

df %>%
   add_count(group) %>% 
   arrange(desc(n)) %>%   
   select(-n)
#    x y group
#1  1 1     g
#2  1 1     g
#3  1 1     g
#4  1 1     g
#5  1 1     g
#6  3 2     z
#7  1 1     z
#8  2 2     z
#9  3 3     a
#10 1 2     a
#11 3 3     a
#12 1 1     b
#13 2 2     b
#14 2 2     b

data

df <- structure(list(x = c(3L, 1L, 2L, 3L, 1L, 3L, 1L, 2L, 2L, 1L, 
1L, 1L, 1L, 1L), y = c(2L, 1L, 2L, 3L, 2L, 3L, 1L, 2L, 2L, 1L, 
1L, 1L, 1L, 1L), group = c("z", "z", "z", "a", "a", "a", "b", 
"b", "b", "g", "g", "g", "g", "g")), class = "data.frame", 
row.names = c(NA, 
-14L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...