Unnest список и собрать предметы с мурлыкать - PullRequest
0 голосов
/ 04 января 2019

У меня есть список вроде:

list(list(goals = c(42L, 52L, 55L), 
          season = "88", 
          player = c("a", "b","c")), 
     list(goals = c(41L,53L, 37L, 40L), 
          season = "89", 
          player = c("a","b", "c", "d")))

Я хочу преобразовать это в фрейм данных в длинном формате, например:

goals player season 
42    a      88
52    b      88
.
.
41    a      89
53    b      89
.

Я могу добиться этого, используя plyr, например:plyr::ldply(mylist, data.frame, .id="season"

Я думаю, что, вероятно, существует обновленный способ сделать это, используя purrr или dplyr?

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Другой способ сделать это, используя do.call, rbind и Map из базы R с as_tibble из dplyr:

do.call(rbind,Map(as_tibble,lst1))
# A tibble: 7 x 3
  goals season player
  <int> <chr>  <chr> 
1    42 88     a     
2    52 88     b     
3    55 88     c     
4    41 89     a     
5    53 89     b     
6    37 89     c     
7    40 89     d    
0 голосов
/ 04 января 2019

Мы можем сделать это, преобразовав элементы list в tibble, пройдя по list, используя map

library(tidyverse)
lst1 %>%
    map_df(as_tibble)
# A tibble: 7 x 3
#  goals player season
#  <dbl> <chr>   <dbl>
#1    42 a          88
#2    52 b          88
#3    55 c          88
#4    41 a          89
#5    53 b          89
#6    37 c          89
#7    48 d          89

. Параметр base R будет преобразовыватьlist из data.frame с, а затем rbind

do.call(rbind, lapply(lst1, as.data.frame))

данные

lst1 <- list(list(goals = c(42, 52, 55), player = c("a", "b", "c"), season = 88), 
     list(goals = c(41, 53, 37, 48), player = c("a", "b", "c", 
     "d"), season = 89))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...