gdata包中的drop.levels(x)和as.factor(as.character(x))有什么区别?

时间:2011-01-17 06:17:31

标签: r gdata

作为问题,我可以看到后期方法的速度更高,为什么要使用第一个?感谢。

3 个答案:

答案 0 :(得分:2)

如果您尝试删除未使用的级别,您只需要:

x <- factor(x) 

答案 1 :(得分:2)

R中的新功能(来自版本2.12.0)是执行相同操作的函数droplevels()。它实现为:

> base:::droplevels.factor
function (x, ...) 
factor(x)
<environment: namespace:base>

所以我会优先使用该功能。它是R中的泛型函数,具有类"factor""data.frame"的对象的方法,后者在数据框中有许多因素需要级别下降时很有用。

答案 2 :(得分:2)

这两个命令完全相同但不完全相同,特别是当你保留了因子的原始顺序时。 在某些情况下,您无法使用: as.factor(as.character(f))。参见:

par(mfrow=c(2,3))
f <- factor(c("D", "B", "C", "K", "A"), levels=c("K", "B", "C", "D"))[2:4]
plot(f, main="Original factor")
f.fc <- as.factor(as.character(f))
plot(f.fc, main="as.factor(as.character(f))")
f.d <- drop.levels(f)
plot(f.d, main="drop.levels(f)")
f.d <- drop.levels(f, reorder=FALSE)
plot(f.d, main="drop.levels(f, reorder=FALSE))")
f.f <- factor(f)
plot(f.f, main="factor(f)")

alt text

as.factor(as.character(f))drop.levels(f)做同样的事情并且它们不保留因素的原始顺序,它们都按ABC顺序重新调整文本的级别。我想保留您可以使用reorder=FALSE中的drop.levels()选项的订单。

这是factor()的默认行为。