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/