drop=TRUE不';t在data.frame中降低因子级别,而在vector中降低因子级别

drop=TRUE不';t在data.frame中降低因子级别,而在vector中降低因子级别,r,dataframe,r-factor,R,Dataframe,R Factor,data.frame筛选中有一个有趣的选项drop=TRUE,请参阅帮助('[.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 Le

data.frame筛选中有一个有趣的选项
drop=TRUE
,请参阅
帮助('[.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!!
>
df=data.frame(a=c(“欧洲”、“亚洲”、“大洋洲”),b=c(1,2,3)) > >df[1:2,,drop=TRUE]$a [1] 欧亚
级别:亚欧大洋洲对于许多人来说,这是一个绊脚石,因为正如彼得·达尔加德在下面的和digEmAll中解释的那样,“下降会带来不同的结果”

如果您想要您想要的,请使用:

d2[] <- lapply(d2, function(x) if (is.factor(x)) factor(x) else x) 

d2[]文件明确规定:

drop:逻辑。如果为TRUE,则结果强制为尽可能低的值 维度。如果只剩下一列,则默认为drop,但没有 如果只剩下一行,则删除

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


因此,此参数与级别下降无关,因此消除超出级别的正确方法就是您提到的方法(即使用
droplevels
函数)。

文档中所说的是

如果为TRUE,则结果将强制到可能的最低维度

因此,它与维度相关,而不是与因子水平相关:

df[, 1]
# [1] europe  asia    oceania
# Levels: asia europe oceania
df[, 1, drop = FALSE]
#         a
# 1  europe
# 2    asia
# 3 oceania
降低因子级别是一个不同的问题。以下是一个(
?“[.factor'
)案例,其中出现了参数
drop
,用于此目的:

ff <- factor(c('AA', 'BA', 'CA'))
ff[1:2, drop = TRUE]
# [1] AA BA
# Levels: AA BA
ff
df[1:2,]$a[,drop=TRUE]

[1] 欧亚
级别:亚欧

哟,伙计,当你尝试使用你的方法时,会发生什么呢?它会在原始数据帧上应用下降,这样你想要的结果就不会出现了

所以你需要做的是在返回的子集上应用掉数ok


如果有任何疑问,请随时与我联系。

我认为您需要返回并实际阅读您链接到的文档。此外,只需在一行中执行
液滴级别(df[1:2,])
即可。感谢@joran和您的解释。但是,如果有人不理解文档,这是否是投反对票的原因?(我被drop=TRUE为向量工作而困惑,请参见我的编辑)。现在,我可能想删除带有答案的非常有趣的问题。谁说我投了反对票?无论如何,如果文档在任何方面令人困惑或模棱两可,我想你可能有道理。否则,我认为“缺乏研究”在这种情况下也适用。@Tomas:我同意你的观点(我没有投反对票),无论如何,当人们似乎没有仔细阅读文档时,社区往往不太欣赏…(这里的世界很激烈;))你可以在最后的观察中加上答案(我同意这很奇怪)感谢!这里有一个很大的混乱,
[i,drop=TRUE]
[i,j,drop=TRUE]
没有!@Tomas:是的,选择“drop”这个名字可能不是个好主意……他们可以像
lapply/tapply()那样使用“simplify”
函数,这在我看来更清楚了……是的,但是
简化
参数在某些地方是
简化
,在其他地方是
简化
mapply
,我想?),默认值在某些地方是
,在其他地方是
。。唉[i,drop=TRUE]
[i,j,drop=TRUE]
不会!如果类是
因子,而不是
数据帧,则会删除它。对我来说,
似乎非常简单。+1对于从R-core成员处获得答案的链接…为什么不只是
d2正确,那是在“droplevels”之前。我仍然觉得它很有用,因为我知道会发生什么。我了解了d[]@AfshinMoazami你想要什么样的例子,我只是回答了这个问题?
ff <- factor(c('AA', 'BA', 'CA'))
ff[1:2, drop = TRUE]
# [1] AA BA
# Levels: AA BA