如何按 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
我有一个数据框,其中一列由唯一因素组成。我想按照预定义的因子水平顺序对这个数据框进行排序,独立于原始顺序。
例如我的数据是这样的:
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