作为问题,我可以看到后期方法的速度更高,为什么要使用第一个?感谢。
答案 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)")
as.factor(as.character(f))
和drop.levels(f)
做同样的事情并且它们不保留因素的原始顺序,它们都按ABC顺序重新调整文本的级别。我想保留您可以使用reorder=FALSE
中的drop.levels()
选项的订单。
这是factor()
的默认行为。