【发布时间】:2012-12-16 22:09:07
【问题描述】:
data.frame 过滤中有一个有趣的选项drop = TRUE,见摘自help('[.data.frame'):
用法
“data.frame”类的 S3 方法
x[i, j, drop = ]
但是当我在 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] 不会,这不是很直观!!
【问题讨论】:
-
我认为您需要返回并实际阅读您链接到的文档。另外,
droplevels(df[1:2,])一行就足够了。 -
感谢@joran 和大家的解释。但是,如果有人不理解文档,是否有理由投反对票?(我对 drop = TRUE 为向量工作感到困惑,请参阅我的编辑)。现在我可能很想删除带有答案的非常有趣的问题..
-
谁说我投了反对票?无论如何,如果文档以任何方式令人困惑或模棱两可,我认为您可能有一点。否则,我认为“缺乏研究”将适用于这种情况。
-
@Tomas:我同意你的观点(我没有投反对票),无论如何,当人们似乎没有仔细阅读文档时,SO 社区往往不太欣赏......(这是一个激烈的世界在这里;))
-
您可以在stackoverflow.com/questions/1535021/…的列表中添加您最终观察到的答案(我同意这很奇怪)