可能重复:在R中的子集数据框中删除因子级别
我用一个特定的因子级别来做了子集观察。当使用
summary()
检查时,这些级别仍然被列出来,但是没有观察到零。 在子集时,它们不应该消失吗?summary()
检查时,这些级别仍然被列出来,但是没有观察到零。 在子集时,它们不应该消失吗?子集操作不会删除空的因子水平。这是一个特性而非缺陷。可以将因子水平看作是某个物品的可能/潜在分类。如果你只对其中的一部分进行子集操作,物品的可能分类并没有改变,只是你的子集中没有包含这些分类。
如果你想要删除这些空的水平,可以参考?droplevels
。
drop=TRUE
:newfactor <- oldfactor[indices, drop=TRUE]
顺便提一下,这不是默认设置的原因之一就是不同级别的因素无法比较。因此,如果您想将因素与原始向量进行比较,或者可能与向量的不同子集进行比较,则需要保留额外的级别。
droplevels
应用于数据框的唯一风险是,默认情况下它将删除所有因子的空级别(而不仅仅是焦点因子的级别),这可能是不希望的。 - Ben Bolkerobj <- transform(obj, fac = droplevels(fac))
。 - Gavin Simpson