2014-12-28 7 views
12

с str(data) я получаю head уровней (1-2 значений)список всех уровней фактора data.frame

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

с dplyr::glimpse(data) я получаю больше значения, но не информация о о количестве/значений коэффициента -уровней. Есть ли автоматический способ получить всю информацию о уровне всех факторов факторов в data.frame? Короткая форма с дополнительной информацией для

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

или точнее элегантный вариант что-то вроде

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

ТНХ Кристофа

ответ

9

Вот некоторые варианты. Мы цикл через «данные» с sapply и получить levels каждого столбца (при условии, что все столбцы factor класс)

sapply(data, levels) 

Или, если нам нужно трубы (%>%) его, это может быть сделано как

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

Или другой вариант summarise_each из dplyr где мы указываем levels внутри funs.

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

Как мы получаем длину всех этих уровней – BigDataScientist

2

Проще всего использовать пакет sqldf и использовать отдельный отчет. Это упрощает автоматическое получение имен уровней факторов, а затем определяет их как уровни для других столбцов/переменных.

Общий фрагмент кода:

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

Пример кода с использованием ирис набора данных:

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

Выход:

flower_type 
1  setosa 
2 versicolor 
3 virginica 
+0

Если у вас нажимайте каждую строку кода на 4 пробела, чтобы отформатировать ее правильно. –

Смежные вопросы