Подтвердить что ты не робот

Список всех факторов уровня данных.

с str(data) Я получаю head уровней (1-2 значения)

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]]))
  }

ТНХ Christof

4b9b3361

Ответ 1

Вот несколько вариантов. Мы прокручиваем "данные" с помощью sapply и получаем levels каждого столбца (при условии, что все столбцы factor class)

sapply(data, levels)

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

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

Или другая опция summarise_each из dplyr, где мы указываем levels в пределах funs.

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

Ответ 2

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

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

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

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

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

Ответ 3

Или используя purrr:

data %>% purrr:map(levels)

Или сначала все факторизовать:

data %>% dplyr::mutate_all(as.factor) %>% purrr:map(levels)

И отвечая на вопрос о том, как получить длины:

data %>% map(levels) %>% map(length)

Ответ 4

Если ваша проблема заключается в том, чтобы вывести список всех уровней для фактора, то я нашел простое решение, используя:

уникальный (ДФ $ х)

Например, для печально известного набора данных радужной оболочки:

уникальный (ирис $ Species)