В чем разница между drop.levels (x) в пакете gdata и as.factor (as.character (x))? - PullRequest
4 голосов
/ 17 января 2011

как вопрос, поскольку я вижу скорость выше для более позднего метода, зачем использовать первый? Спасибо.

Ответы [ 3 ]

2 голосов
/ 17 января 2011

Новое в R (начиная с версии 2.12.0) - это функция droplevels(), которая делает то же самое.Он реализован как:

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

Так что я бы использовал эту функцию из предпочтений.Это универсальная функция в R с методами для объектов класса "factor" и "data.frame", последняя полезна, когда во фрейме данных есть много факторов, для которых необходимо сбросить уровни.

2 голосов
/ 17 января 2011

Две команды делают то же самое, но не совсем, особенно если у вас есть сохранить первоначальный порядок факторов. В некоторых случаях вы не можете использовать: 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().

2 голосов
/ 17 января 2011

Если вы пытаетесь сбросить неиспользуемые уровни, все что вам нужно сделать, это:

x <- factor(x) 
...