我有一个数据框架,其中一列由独特的因素组成。我想要对这个数据框架进行排序,按因素级别的预定义顺序排序,与原来的顺序无关。
例如,我的数据如下所示:
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我知道,在这种情况下,我只需要交换第二行和第三行,但一般来说,我不知道这些因素在数据框架中的顺序,而且我无法找到一种方法来做到这一点,除非对我可以使用的因素以及它们最终应该使用的顺序有很强的限制。(例如按字母顺序排列)
发布于 2019-08-01 20:21:06
我们可以将“组”的levels指定为category_order,并使用它来“排列”
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))发布于 2019-08-02 00:31:12
在R基中,我们可以使用match来得到基于category_order的group的阶数。
df[match(df$group, category_order), ]
# group value
#1 tree 50
#3 house 2
#2 lake 1
#4 human 5https://stackoverflow.com/questions/57316356
复制相似问题