вложенный список во фрейм данных - PullRequest
1 голос
/ 06 февраля 2020

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

после нескольких итераций я создал набор вложенных списков со следующей схемой (для тысяч продуктов)

My_list <- list()
My_list$'product1' <- list()
My_list$'product1'[[1]] <- list()
My_list$'product1'[[2]] <- list()
My_list$'product2' <- list()
My_list$'product2'[[1]] <- list()
My_list$'product2'[[2]] <- list()

My_list$'product1'[[1]]$A <- 1
My_list$'product1'[[1]]$B <- 2
My_list$'product1'[[2]]$A <- 3
My_list$'product1'[[2]]$B <- 4
My_list$'product2'[[1]]$A <- 5
My_list$'product2'[[1]]$B <- 6

И я хочу преобразовать это во фрейм данных со следующей структурой

data.frame(sku=c("product1","product1","product2"),Item=c("1","2","1"),A=c(1,3,5), B=c(2,4,6))

1 Ответ

1 голос
/ 06 февраля 2020

Вот один вариант с unnest_wider

library(tidyr)
library(dplyr)
library(tibble)
library(data.table)
enframe(My_list, name = "sku") %>%
    unnest(c(value)) %>% 
    unnest_wider(c(value)) %>%
    na.omit %>%
    mutate(Item = rowid(sku))
# A tibble: 3 x 4
#  sku          A     B  Item
#  <chr>    <dbl> <dbl> <int>
#1 product1     1     2     1
#2 product1     3     4     2
#3 product2     5     6     1

Или с base R

lst1 <- lapply(My_list,  function(x) do.call(rbind,  lapply(x, as.data.frame)))
do.call(rbind, Map(cbind, sku = names(lst1), lst1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...