以前出现过在子集时删除未使用的因子水平的问题。常见的解决方案包括通过声明尽可能使用字符向量
options(stringsAsFactors = FALSE)
然而,有时,有序因子是绘图所必需的,在这种情况下,我们可以使用方便的函数,比如droplevels
为 创建一个包装器subset
:
subsetDrop <- function(...){droplevels(subset(...))}
我意识到这subsetDrop
主要解决了这个问题,但在某些情况下,子集 via[
更方便(而且打字更少!)。
我的问题是,为了方便起见,我们可以通过覆盖[
数据框以自动删除因子级别来推动这成为 R 的“默认”行为。例如,Hmisc 包包含用于子集单个因子的dropUnusedLevels
覆盖[.factor
(不再需要,因为默认值[.factor
似乎有一个drop
用于删除未使用级别的参数)。我正在寻找一个类似的解决方案,它允许我使用[
但自动删除未使用的因子级别(当然在有序因子的情况下保留顺序)对数据帧进行子集化。