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]
是一个小问题,而不是一个因素。但是,为什么因子水平会发生变化?我怎样才能进入小标题并抓住这个因素?
解决方案
对于多列,我们可以在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)))
推荐阅读
- javascript - 用于用户角色的不同 React Webpack JS 捆绑包
- javascript - 全局环境中的node.js查找符号
- php - 在 Mac 上使用 PHP 和 SQL
- sql - SUM 和 GROUP BY 2 个不同的值
- c# - 当结果太大时,托管在 docker SQL-Request 中的 ASP.Net Core 超时
- java - Main 不会从适当的类中提取信息。继续产生错误
- java - 使用 Maven 存储库进行 Gradle 离线构建
- javascript - 无法更新
如果满足条件,则使用 JavaScript 标记
- bash - 如何识别字符串是否不在列表中,或者是否有等效于'!=〜'?
- c# - 尝试使用 ASP.NET Core 在 Razor 文件中制作更简洁的 C#