2012-09-20 18 views

Respuesta

14

La subconjunto no baja los niveles vacíos. Por qué este es el caso es que es una característica. Piense en ello como los niveles de su factor determinan las categorías posibles/potenciales de una cosa . Si solo toma un subconjunto de estas cosas, las posibles categorías de cosa no cambian, su subconjunto simplemente no contiene ninguna de ellas.

Si desea eliminar estos niveles vacíos, consulte ?droplevels.

+1

El único peligro de 'droplevels' aplicado a un marco de datos es que, de forma predeterminada, se eliminarán los niveles vacíos para ** todos ** factores (en lugar de solo para los niveles del factor focal), que podrían no desearse. –

+2

Correcto, para el único factor que haría 'obj <- transform (obj, fac = droplevels (fac))' si quisiera dejar intactos otros factores. –

8

Para hacer que los niveles adicionales desaparecen, utilice drop=TRUE cuando en subconjuntos:

newfactor <- oldfactor[indices, drop=TRUE] 

Por cierto, una de las razones esto no es el valor por defecto es que los factores con diferentes niveles no se pueden comparar. Entonces, si quieres comparar tus factores con el vector original, o tal vez un subconjunto diferente del vector, necesitarías mantener los niveles extra.