如何按 R 中预定的因子水平顺序对数据框进行排序?

How can I sort a dataframe by a predetermined order of factor levels in R?

我有一个数据框,其中一列由唯一因素组成。我想按照预定义的因子水平顺序对这个数据框进行排序,独立于原始顺序。

例如我的数据是这样的:

label <- c('tree','lake','house', 'human')

number <- c(50,1,2,5)


df <- data.frame(

  group = label,

  value = number)

category_order <- category_order = c('tree','house','lake','human') 

其中 df 的形式为

     group number
1    tree  50
2    lake   1
3    house  2
4    human  5

但我希望它像 category_oder 一样排序,所以 df_new 看起来像:

     group number
1    tree  50
2    house  2
3    lake   1
4    human  5

我知道在这种情况下我可以只交换第二行和第三行,但一般来说我不知道​​数据帧中因素的顺序,我找不到办法这样做没有对我可以使用的因素以及它们最终应该出现的顺序有严格的限制。 (例如字母顺序)

我们可以将 'group' 的 levels 指定为 category_order 并使用它来 `arrange

library(dplyr)
df1 <- df %>% 
          arrange(factor(group, levels = category_order))
df1
#  group value
#1  tree    50
#2 house     2
#3  lake     1
#4 human     5

或使用fct_relevel

library(forcats)
df %>% 
   arrange(fct_relevel(group, category_order))

在base R中,我们可以使用match根据category_order

得到group的顺序
df[match(df$group, category_order), ]

#  group value
#1  tree    50
#3 house     2
#2  lake     1
#4 human     5