R中的鬼因子水平[重复]

Posted

技术标签:

【中文标题】R中的鬼因子水平[重复]【英文标题】:Ghost factor levels in R [duplicate] 【发布时间】:2012-09-12 20:47:50 【问题描述】:

可能重复:dropping factor levels in a subsetted data frame in R

我已经用某个因子水平对观察进行了子集化。在检查是否已使用 summary() 完成此操作时,仍然列出了级别,但观察值为零。他们不应该在子集期间消失吗?

【问题讨论】:

【参考方案1】:

子集不会删除空级别。为什么会这样是因为它是一个特性。将其视为您的因素水平决定了事物的可能/潜在类别。如果您只选取这些事物的一个子集,那么 事物 的可能类别不会改变,您的子集只是不包含它们中的任何一个。

如果您想删除这些空级别,请参阅?droplevels

【讨论】:

droplevels 应用于数据框的唯一危险是,默认情况下,它会为 所有 因素(而不仅仅是焦点因素的水平)丢弃空级别,这可能是不受欢迎的。 对,如果我想让其他因素保持不变,我会做obj <- transform(obj, fac = droplevels(fac)) 的单一因素。【参考方案2】:

要使多余的级别消失,请在子集时使用drop=TRUE

newfactor <- oldfactor[indices, drop=TRUE]

顺便说一句,这不是默认值的一个原因是无法比较不同级别的因素。因此,如果您想将因子与原始向量或向量的不同子集进行比较,则需要保留额外的水平。

【讨论】:

以上是关于R中的鬼因子水平[重复]的主要内容,如果未能解决你的问题,请参考以下文章

R randomForest子集无法摆脱因子水平[重复]

在过滤R data.frames时更新因子水平[重复]

R因子

将值分配给数字因子水平[重复]

如何调试线性模型和预测的“因子具有新水平”错误[重复]

`levels<-`(`*tmp*`, value = as.character(levels)) 中的错误:因子级别 [3] 重复