2014-12-28 10 views
12

con str(data) ho la head dei livelli (1-2 valori)lista tutti i livelli di fattore di un data.frame

fac1: Factor w/ 2 levels ... : 
fac2: Factor w/ 5 levels ... : 
fac3: Factor w/ 20 levels ... : 
val: num ... 

con dplyr::glimpse(data) ricevo più valori, ma non informazioni su numero/valori del fattore -levels. C'è un modo automatico per ottenere tutte le informazioni di livello di tutti i fattori vars in un data.frame? Una forma breve con più informazioni per

levels(data$fac1) 
levels(data$fac2) 
levels(data$fac3) 

o più precisamente una versione elegante per qualcosa come

for (n in names(data)) 
    if (is.factor(data[[n]])) { 
    print(n) 
    print(levels(data[[n]])) 
    } 

thx Christof

risposta

9

Qui ci sono alcune opzioni. Noi ciclo attraverso la 'data' con sapply e ottenere il levels di ogni colonna (assumendo che tutte le colonne sono factor classe)

sapply(data, levels) 

Oppure, se abbiamo bisogno di tubo (%>%) esso, questo può essere fatto come

library(dplyr) 
data %>% 
    sapply(levels) 

o un'altra opzione è summarise_each da dplyr dove specifichiamo il levels all'interno del funs.

data %>% 
     summarise_each(funs(list(levels(.)))) 
+3

come possiamo ottenere la lunghezza di tutti quei livelli – BigDataScientist

2

Un metodo più semplice consiste nell'utilizzare il pacchetto sqldf e utilizzare un'istruzione distinta select. In questo modo è più semplice ottenere automaticamente i nomi dei livelli dei fattori e quindi specificare come livelli le altre colonne/variabili.

Codice generico frammento è:

library(sqldf) 
    array_name = sqldf("select DISTINCT *colname1* as '*column_title*' from *table_name*") 

codice di esempio utilizzando dell'iride insieme di dati:

df1 = iris 
factor1 <- sqldf("select distinct Species as 'flower_type' from df1") 
factor1 ## to print the names of factors 

uscita:

flower_type 
1  setosa 
2 versicolor 
3 virginica 
+0

se si rientri ogni riga di codice di 4 spazi e si formatterà correttamente. –