R中的Ghost因子水平

12
可能重复:在R中的子集数据框中删除因子级别 我用一个特定的因子级别来做了子集观察。当使用summary()检查时,这些级别仍然被列出来,但是没有观察到零。 在子集时,它们不应该消失吗?
2个回答

16

子集操作不会删除空的因子水平。这是一个特性而非缺陷。可以将因子水平看作是某个物品的可能/潜在分类。如果你只对其中的一部分进行子集操作,物品的可能分类并没有改变,只是你的子集中没有包含这些分类。

如果你想要删除这些空的水平,可以参考?droplevels


1
droplevels 应用于数据框的唯一风险是,默认情况下它将删除所有因子的空级别(而不仅仅是焦点因子的级别),这可能是不希望的。 - Ben Bolker
2
对于单个因子,如果我想保留其他因子不变,我会执行 obj <- transform(obj, fac = droplevels(fac)) - Gavin Simpson

9
为了消除额外的级别,请在子集时使用drop=TRUE
newfactor <- oldfactor[indices, drop=TRUE]

顺便提一下,这不是默认设置的原因之一就是不同级别的因素无法比较。因此,如果您想将因素与原始向量进行比较,或者可能与向量的不同子集进行比较,则需要保留额外的级别。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接