вынудить список к датафрейму - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь взять вложенный список и сохранить содержимое в фрейме данных.

Список является выходом из функции Hmsic::describe. Вот тестовый пример.

  list <- Hmisc::describe(iris)

Этот список содержит несколько объектов, и некоторые из них являются вложенными. Меня интересует только подмножество объектов в списке.

unlist(list [[1]])[1:4]
unlist(list [[2]])[1:4]
unlist(list [[3]])[1:4]
unlist(list [[4]])[1:4]

Ожидаемый вывод будет иметь два кадра данных со следующими объектами списка, преобразованными в столбцы

Для объекта списка на основе непрерывной переменной ожидаемый кадр данных будет выглядеть следующим образом

   description               n       missing  distinct    lowest                       highest
   Sepal.Length            150        0            35     4.3, 4.4, 4.5, 4.6, 4.7      7.3, 7.4, 7.6, 7.7, 7.9
   Sepal.Width             150        0            23     2.0, 2.2, 2.3, 2.4, 2.5      3.9, 4.0, 4.1, 4.2, 4.4
   Petal.Length            150        0            43     1.0, 1.1, 1.2, 1.3, 1.4      6.3, 6.4, 6.6, 6.7, 6.9
   Petal.Width             150        0            22     0.1, 0.2, 0.3, 0.4, 0.5      2.1, 2.2, 2.3, 2.4, 2.5

Для объекта списка, основанного на дискретных переменных, ожидаемый фрейм данных будет выглядеть следующим образом:

      description      n       missing   distinct   Values                           Frequency          
      Species        150        0        3          setosa, versicolor,  virginica   50,50,50

Любая помощь в достижении этого очень ценится. Благодаря.

1 Ответ

1 голос
/ 24 апреля 2020

Прежде всего. Hmsic имеет опечатку, это Hmisc.

Вы можете получить доступ к элементу списка с помощью $.

, и я не думаю, что есть элегантная функция для сделать вашим фреймом данных.

Вот минимальный пример для непрерывного фрейма данных.

# install.packages('Hmisc')

listObj <- Hmisc::describe(iris)

dataframe <- c()

for(i in 1:4){
  subList <- listObj[[i]]

  rowadd <- c(
    subList$descript,
    subList$counts[['n']],
    subList$counts[['missing']],
    subList$counts[['distinct']],
    as.character(unname(paste(subList$extremes[1:5], collapse = ', '))),
    as.character(unname(paste(subList$extremes[6:10], collapse = ', ')))
  )

  dataframe <- rbind(dataframe, rowadd)

}
dataframe <- data.frame(dataframe, row.names = NULL)
colnames(dataframe) <- c('description', 'n', 'missing', 'distinct', 'lowest', 'highset')

Редактировать: R 4.0 теперь поддерживает изменение списка переменных на data.frame

Проверка list2DF() функция если это работает, как вы ожидали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...