对一列进行分组并根据 R 中的字符串向量重新排列另一字符串列

ahb*_*bon 4 r dataframe dplyr tidyverse

对于以下玩具数据dd,我尝试根据向量的顺序对列进行分组langue并重新排列列:charchar_order

dd <- data.frame(langue = c('English', 'French', 'English', 'French'),
                 char = c('world', 'monde', 'hello', 'bonjour'), 
                 x = c(8, 3, 9, 9),
                 y = c(1, 1, 1, 2))
dd

char_order <- c('hello', 'world', 'bonjour', 'monde')
dd %>% 
  group_by(langue) %>% arrange(.by_group = TRUE)
Run Code Online (Sandbox Code Playgroud)

出去:

  langue  char        x     y
  <chr>   <chr>   <dbl> <dbl>
1 English world       8     1
2 English hello       9     1
3 French  monde       3     1
4 French  bonjour     9     2
Run Code Online (Sandbox Code Playgroud)

但我希望得到如下结果:

  langue  char        x     y
  <chr>   <chr>   <dbl> <dbl>
1 English hello       9     1
2 English world       8     1
3 French  bonjour     9     2
4 French  monde       3     1
Run Code Online (Sandbox Code Playgroud)

我怎样才能在管道(%>%)中使用dplyr或其他包来实现这一点?真诚的感谢。

Par*_*ark 5

您可以设置因子水平

dd %>%
  mutate(char = factor(char, levels = char_order)) %>%
  group_by(langue) %>% arrange(char, .by_group = TRUE)

  langue  char        x     y
  <chr>   <fct>   <dbl> <dbl>
1 English hello       9     1
2 English world       8     1
3 French  bonjour     9     2
4 French  monde       3     1
Run Code Online (Sandbox Code Playgroud)

  • 刚刚评论了类似的事情 (2认同)