使用变量在数据框中同时使用因子名称和水平顺序来更改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]是小标题,而不是因素。但是,为什么因子水平发生变化?而我该如何深入讨论并抓住因素呢?

阿克伦

对于多列,我们可以在 mutate_at

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

fct_relevelforcats

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用数据框列更改因子水平

更改因子水平但保持相同的水平顺序

在子数据框中删除未使用的因子水平

当因子水平重复时锁定因子水平顺序

使用dplyr过滤R中的因子水平

ifelse使因子“忘记”其水平顺序

使用R中因子自身的子集重命名因子水平

R:在数据框中,使用因子变量的级别时出现错误

区分R中的因子变量的水平

从因子变量中删除特定因子水平

修改数据框中的变量,仅适用于某些水平的因子(可能使用dplyr)

R中的组合因子水平

R中的缺失因子水平

在DF中找到0,1-变量并按水平顺序设置为因子

如何使用R根据匹配查找数据帧替换数据帧的多个列中的因子水平

R中的函数创建:使用因子水平作为自变量?

如何根据不同数据框中相同变量的水平创建因子变量

通过匹配给定因子水平的变量/列选择数据框中的变量/列

如何使用已知日期格式的因子水平来通知其余数据框?

使用apply()函数更新R中数据帧的多列的因子水平

使用dplyr tidyr在汇总表中保留输入变量和因子水平的顺序

如何更改因子水平的名称?

从数据框中获取因子的水平为整数

尝试为数据框中的特定变量设置因子水平--Lapply 返回 NA

在Swing中对齐垂直和水平顺序组

R:从数据框中相同因子水平的先前观察中提取数据

如何使用R在数据框中按因子进行计算?

如何获得R中每个因子变量的水平

在数据框中重新排序因子名称的级别