Функция для извлечения всех элементов списка из столбца данных в отдельные столбцы - PullRequest
0 голосов
/ 12 сентября 2018

После использования purrr:map в столбце списка временных рядов я получаю результаты в виде списка тибблов (здесь у меня может быть неправильная терминология, но, надеюсь, пример прояснит ситуацию). Можно ли извлечь каждый столбец в результирующем списке как столбец фрейма данных без указания имени каждого элемента списка?

Пример данных:

tmp <- tibble(col1 = c("A1", "A2") , 
              col2 = c("B1", "B2"), 
              col3 = list(
                  list(x = TRUE, b = list(data.frame(y1=c(1,2,3), y2=c(4,5,6)))), 
                  list(x = FALSE, b = list(data.frame(y1=c(1,2,3), y2=c(4,5,6))))))

Требуемый вывод (но без необходимости вводить каждый столбец - на самом деле у меня намного больше):

tmp %>% mutate(x = map(tmp$col3, "x")[[1]],
               b = map(tmp$col3, "b")[[1]])

Редактировать : С тех пор я понял, что мое "ручное решение" выше неверно .. Я не уверен, как даже извлечь b вручную, но для х, это должно было быть:

tmp %>% mutate(x = map_lgl(col3, "x"))

1 Ответ

0 голосов
/ 12 сентября 2018

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

library(tidyverse)
tmp %>% mutate(new_col = map(col3, as_tibble)) %>% unnest(new_col)

#> # A tibble: 2 x 5
#>   col1  col2  col3       x     b                   
#>   <chr> <chr> <list>     <lgl> <list>              
#> 1 A1    B1    <list [2]> TRUE  <data.frame [3 × 2]>
#> 2 A2    B2    <list [2]> FALSE <data.frame [3 × 2]>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...