我有一个很大的数据框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]
是小标题,而不是因素。但是,为什么因子水平发生变化?而我该如何深入讨论并抓住因素呢?
对于多列,我们可以在 mutate_at
library(dplyr)
d %>%
mutate_at(vars(my.column),
list(~ factor(., levels = proper.order, exclude = NULL)))
或fct_relevel
从forcats
library(forcats)
d %>%
mutate_at(vars(my.column), list(~ fct_relevel(., proper.order)))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句