dplyr переупорядочивание строк за строкой - PullRequest
0 голосов
/ 01 октября 2018

У меня есть следующие данные:

library(tidyverse)


d1 <- data_frame(Nat = c("UK", "UK", "UK", "NONUK", "NONUK", "NONUK"),
 Type = c("a", "b", "c", "a", "b", "c"))

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

d2 <- data_frame(
 Nat = c("UK", "UK", "UK", "NONUK", "NONUK", "NONUK"),
 Type = c("b", "c", "a", "b", "c", "a"))

Таким образом, группировка в Великобритании и за пределами Великобритании остается,но строки «Тип» сместились.Этот вопрос очень похож на этот: Изменение порядка строк при условии строковой переменной

Однако ответ выше зависит от того, какие строки вы переупорядочиваете в алфавитном порядке (исключая Лондон).Есть ли способ переупорядочить строковое значение более конкретно, когда вы сами выбираете порядок строк, вместо того, чтобы полагаться на его алфавитность?Есть ли способ сделать это с помощью dplyr?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Как насчет явных уровней в цепочке dplyr, чтобы выбрать ваш заказ:

library(dplyr)
d1 %>%
arrange(factor(.$Nat, levels = c("UK", "NONUK")), factor(.$Type, levels = c("c", "b","a")))

# A tibble: 6 x 2
  Nat   Type 
  <chr> <chr>
1 UK    c    
2 UK    b    
3 UK    a    
4 NONUK c    
5 NONUK b    
6 NONUK a

Другой пример:

d1 %>%
arrange(factor(.$Nat, levels = c("UK", "NONUK")), factor(.$Type, levels = c("b", "c","a")))
# A tibble: 6 x 2
  Nat   Type 
  <chr> <chr>
1 UK    b    
2 UK    c    
3 UK    a    
4 NONUK b    
5 NONUK c    
6 NONUK a 
0 голосов
/ 01 октября 2018

Вы можете использовать match

string_order <- c("b", "c", "a")
d1 %>% 
  group_by(Nat) %>% 
  mutate(Type = Type[match(string_order, Type)]) %>%
  ungroup()
#  A tibble: 6 x 2
#  Nat   Type 
#  <chr> <chr>
#1 UK    b    
#2 UK    c    
#3 UK    a    
#4 NONUK b    
#5 NONUK c    
#6 NONUK a 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...