首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中按预先确定的因子级别排序数据?

如何在R中按预先确定的因子级别排序数据?
EN

Stack Overflow用户
提问于 2019-08-01 20:11:29
回答 2查看 2.9K关注 0票数 2

我有一个数据框架,其中一列由独特的因素组成。我想要对这个数据框架进行排序,按因素级别的预定义顺序排序,与原来的顺序无关。

例如,我的数据如下所示:

代码语言:javascript
复制
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具有以下形式

代码语言:javascript
复制
     group number
1    tree  50
2    lake   1
3    house  2
4    human  5

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

代码语言:javascript
复制
     group number
1    tree  50
2    house  2
3    lake   1
4    human  5

我知道,在这种情况下,我只需要交换第二行和第三行,但一般来说,我不知道这些因素在数据框架中的顺序,而且我无法找到一种方法来做到这一点,除非对我可以使用的因素以及它们最终应该使用的顺序有很强的限制。(例如按字母顺序排列)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-01 20:21:06

我们可以将“组”的levels指定为category_order,并使用它来“排列”

代码语言:javascript
复制
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

代码语言:javascript
复制
library(forcats)
df %>% 
   arrange(fct_relevel(group, category_order))
票数 4
EN

Stack Overflow用户

发布于 2019-08-02 00:31:12

在R基中,我们可以使用match来得到基于category_ordergroup的阶数。

代码语言:javascript
复制
df[match(df$group, category_order), ]

#  group value
#1  tree    50
#3 house     2
#2  lake     1
#4 human     5
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57316356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档