【发布时间】:2016-10-09 12:21:27
【问题描述】:
我发现在 R 中操纵因子变量过于复杂。清洁因素时我经常想做的事情包括:
-
重新排序级别 – 不仅仅是设置参考类别,还可以将所有级别按逻辑(非字母顺序)汇总表。
x <- factor(x, levels = new.order) -
重新编码/重命名因子级别 - 以简化名称和/或将多个类别合并为一组。对于一对一重新编码
levels(x) <- new.levels(x)或plyr::revalue,请参阅here 或here 示例。car::recode可以在单个语句中执行多个一对多匹配,但不支持正则表达式匹配。 -
删除关卡 - 不只是删除未使用的关卡,而是将一些关卡设置为缺失。 (例如那些有错误代码的)。
x <- factor(as.character(x), exclude = drop.levels) -
添加级别 - 显示计数为零的类别。
最好有一个函数可以同时完成上述所有操作,允许对重新编码和删除因子进行模糊(正则表达式)匹配,可以在其他函数中使用(例如 lapply 或 @987654330 @),并且具有简单(一致)的语法。
我已经在下面发布了我对此的最佳尝试作为答案,但是如果我错过了已经存在的功能或者代码是否可以改进,请告诉我。
编辑
我知道forcats 包,它的副标题是使用分类变量(因子)的工具。该软件包有许多选项用于重新调整级别('fct_infreq'、'fct_reorder'、'fct_relevel'、...)、重新编码/分组级别('fct_recode'、'fct_lump'、'fct_collapse')、下降级别('fct_recode' ),并添加级别 ('fct_expand')。但没有计划支持正则表达式匹配 (https://github.com/tidyverse/forcats/issues/214)。
【问题讨论】:
-
“一步到位”是什么意思?
-
@effel 我想我正在考虑使用单行命令来执行所有可以合并到 lapply 命令或类似命令中的操作。尽管我承认这可以通过将所有内容打包到自定义函数中来在 R 中完成。我还想知道我是否错过了来自 dplyr 或其他包的命令,该命令执行
car::recode的功能,但语法更友好。