2012-09-20 15 views

risposta

14

La sottostringa non lascia livelli vuoti. Perché questo è il caso è che è una caratteristica. Pensala come i tuoi livelli di fattore determinano le possibili/potenziali categorie di una cosa . Se prendi solo un sottoinsieme di queste cose, le possibili categorie di cosa non cambiano, il tuo sottoinsieme semplicemente non ne contiene nessuno.

Se si desidera eliminare questi livelli vuoti, vedere ?droplevels.

+1

L'unico pericolo di "droplevels" applicato a un frame di dati è che, per impostazione predefinita, farà cadere i livelli vuoti per ** tutti i fattori ** (anziché solo per i livelli del fattore focale), che potrebbero essere indesiderati. –

+2

Giusto, per il singolo fattore farei 'obj <- transform (obj, fac = droplevels (fac))' se volessi lasciare intatti altri fattori. –

8

Per rendere i livelli extra scompaiono, utilizzare drop=TRUE quando sottoinsiemi:

newfactor <- oldfactor[indices, drop=TRUE] 

Per inciso, una delle ragioni per questo non è l'impostazione predefinita è che i fattori con livelli diversi non possono essere paragonati. Quindi, se vuoi confrontare i tuoi fattori con il vettore originale, o forse con un sottoinsieme diverso del vettore, devi mantenere i livelli extra.