Создайте фрейм данных из списка таблиц в R - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь создать фрейм данных, который мне нужно заполнить, из списка в R. Список содержит 2003 таблицы, представляющие данные о земном покрове для разных округов.Каждая таблица имеет две строки - метки столбцов и строку данных о земельном покрове.К сожалению, каждая таблица имеет различное количество столбцов (если для этого округа класс Landcover не присутствовал вместо получения нуля, он отбрасывал столбец при создании списка).

То, что я хочу, - это информационный фрейм длиной 2003 строки и шириной 15 столбцов (по одному столбцу для каждого класса земельного покрова).

Когда я попытался df <- data.frame(matrix(unlist(l), nrow=132, byrow=T)) на основе другого вопроса, он создал длинную таблицу из двух столбцов (один с метками для всех округов 2003 года и значения во втором столбце).Поскольку у каждой таблицы была неодинаковая длина, я не могу преобразовать это в широкий формат.

некоторые образцы данных:

l <- replicate(
     2003,
     list(sample(1:100, sample(1:15,15))),
     simplify = FALSE
 )

1 Ответ

0 голосов
/ 06 декабря 2018

Если ваш объект на самом деле представляет собой список фреймов данных, вы должны сделать data.table::rbindlist(your_list, fill = T).Поскольку ваш пример на самом деле не является списком фреймов данных, требуется дополнительный шаг.

library(data.table)

l <- lapply(l, function(x){
  x <- as.list(x[[1]])
  setNames(x, paste0('V', seq_along(x)))})

df <- rbindlist(l, fill = T)

В базе R

# make the lengths all the same
l <- lapply(l, function(x) c(x[[1]], rep(NA, max(0, 15 - length(x[[1]])))))

# rbind and convert to df
df <- as.data.frame(do.call(rbind, l))

dim(df)
# [1] 2003   15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...