Groupby 一列并根据 R 中的字符串向量重新排列另一列字符串

Posted

技术标签:

【中文标题】Groupby 一列并根据 R 中的字符串向量重新排列另一列字符串【英文标题】:Groupby one column and rearrange another string column based on a vector of string in R 【发布时间】:2022-01-21 19:25:48 【问题描述】:

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

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)

输出:

  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

但我希望得到如下结果:

  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

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

【问题讨论】:

dd %&gt;%arrange(langue, factor(char, char_order)) 我测试过,你的代码可以达到与@Park 相同的结果,谢谢。 【参考方案1】:

您可以设置因子水平

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

【讨论】:

刚刚评论了类似的东西

以上是关于Groupby 一列并根据 R 中的字符串向量重新排列另一列字符串的主要内容,如果未能解决你的问题,请参考以下文章

groupby 基于一列并获取另一列中的总和值

Groupby 一列并计算另一列的条件?

Groupby 一列并找到它的总和和计数

循环遍历 R 中的列并提取字符

对另一列python中的每个类别执行多个groupby

将表中的一列替换为不同表中的列并选择 *