在数据框中使用因子名称和水平顺序的变量更改 R 中的因子水平

  • 本文关键字:水平 顺序 变量 数据 r
  • 更新时间 :
  • 英文 :


我有一个大型数据框 1,其中包含许多因子列。我想更改每个因子的因子级别顺序。

我有一个查找数据框 2 用于正确的因子水平订单。这意味着我可以使用因子的变量来引用查找数据框。我可以抓取订单并将其放入不同的变量中。目前为止,一切都好。

简化示例:

d = tibble(
size = c('small','small','big', NA)
)
d$size = as.factor(d$size)
levels(d$size) # Not what I want.
proper.order = c('small', 'big') # this comes from somewhere else

我可以使用proper.order来更改 d 中的一列。

d$size = factor(d$size, levels = proper.order)
levels(d$size) # What I want.

我想使用变量引用列名(size)。

这不起作用:

my.column = 'size'
d[names(d) == my.column] = factor(d[names(d) == my.column], levels = proper.order, exclude = NULL)

levels(d$size) # What I want.
d # Not what I want.

我希望看到因素重新排序。这种情况会发生。我希望该因素保持其值(显然)。它们都设置为 NA。

我怀疑这是因为d[names(d) == my.column]是一个小问题,而不是一个因素。但是,为什么因子水平会发生变化呢?我怎样才能伸手进入tibble并抓住这个因素?

对于多列,我们可以在mutate_at中指定

library(dplyr)
d %>% 
mutate_at(vars(my.column), 
list(~ factor(., levels = proper.order, exclude = NULL)))

或者来自forcatsfct_relevel

library(forcats)
d %>%
mutate_at(vars(my.column), list(~ fct_relevel(., proper.order))) 

最新更新