avec str(data)
j'obtiens le head
des niveaux (1-2 valeurs)
fac1: Factor w/ 2 levels ... :
fac2: Factor w/ 5 levels ... :
fac3: Factor w/ 20 levels ... :
val: num ...
avec dplyr::glimpse(data)
J'obtiens plus de valeurs, mais pas d'informations sur le nombre/valeurs des niveaux de facteur. Existe-t-il un moyen automatique d'obtenir toutes les informations de niveau de toutes les variables factorielles dans un data.frame? Un formulaire court avec plus d'informations pour
levels(data$fac1)
levels(data$fac2)
levels(data$fac3)
ou plus précisément une version élégante pour quelque chose comme
for (n in names(data))
if (is.factor(data[[n]])) {
print(n)
print(levels(data[[n]]))
}
thx Christof
Voici quelques options. Nous parcourons les 'données' avec sapply
et obtenons le levels
de chaque colonne (en supposant que toutes les colonnes sont de la classe factor
)
sapply(data, levels)
Ou si nous avons besoin de pipe (%>%
), cela peut être fait comme
library(dplyr)
data %>%
sapply(levels)
Ou une autre option est summarise_each
de dplyr
où nous spécifions le levels
dans le funs
.
data %>%
summarise_each(funs(list(levels(.))))
Une méthode plus simple consiste à utiliser le package sqldf et à utiliser une instruction select distinct. Il est ainsi plus facile d'obtenir automatiquement les noms des niveaux de facteur, puis de les spécifier comme niveaux pour d'autres colonnes/variables.
L'extrait de code générique est:
library(sqldf)
array_name = sqldf("select DISTINCT *colname1* as '*column_title*' from *table_name*")
Exemple de code utilisant le jeu de données iris:
df1 = iris
factor1 <- sqldf("select distinct Species as 'flower_type' from df1")
factor1 ## to print the names of factors
Sortie:
flower_type
1 setosa
2 versicolor
3 virginica
Si votre problème est spécifiquement de produire une liste de tous les niveaux pour un facteur, j'ai trouvé une solution simple en utilisant:
unique (df $ x)
Par exemple, pour le fameux jeu de données iris:
unique (iris $ espèces)
Ou en utilisant purrr:
data %>% purrr:map(levels)
Ou tout d'abord factoriser:
data %>% dplyr::mutate_all(as.factor) %>% purrr:map(levels)
Et répondant à la question de savoir comment obtenir les longueurs:
data %>% map(levels) %>% map(length)