data.frame过滤中有一个有趣的drop = TRUE选项,请参见help('[.data.frame')的摘录:



但是当我在data.frame上尝试时,它不起作用!

> df = data.frame(a = c("europe", "asia", "oceania"), b = c(1, 2, 3))
>
> df[1:2,, drop = TRUE]$a
[1] europe asia
Levels: asia europe oceania     <--- oceania shouldn't be here!!
>

我知道还有其他方法
df2 <- droplevels(df[1:2,])

,但是文档中许诺了更为优雅的方法,所以为什么它不起作用? 是一个错误吗?因为我不知道这怎么可能是一个功能...

编辑:我对矢量的drop = TRUE下降因子水平感到困惑,如you can see here[i, drop = TRUE]不会降低因子水平,而[i, j, drop = TRUE]不会降低因子水平,这不是很直观!

最佳答案

该文档明确指出:



这意味着,如果drop = TRUE和过滤后的data.frame结果在单个列或行中,则将结果强制为向量/列表,而不是返回单列/单行data.frame

因此,此参数与电平下降没有关系,因此消除电平超出范围的正确方法是您提到的一种方法(即使用droplevels函数)。

关于r - drop = TRUE不会降低data.frame中的因子水平,而在向量中却,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14123792/

10-12 17:41