Tidyr: Как вложиться в отдельные столбцы списка по сравнению со списком фреймов данных?

Созданный на 6 мая 2016  ·  3Комментарии  ·  Источник: tidyverse/tidyr

Как указано (https://github.com/hadley/dplyr/issues/1800), я публикую этот вопрос здесь.

Как лучше всего сделать этот вариант вложения фрейма данных? Я не хотел использовать tidyr::nest() потому что не хотел, чтобы другие переменные были похоронены во фреймах данных - я хотел, чтобы они были отдельными столбцами списка. Sthg как это:

library(dplyr)
mtcars %>%
  group_by(cyl) %>%
  summarize(gear = split(gear, cyl),
            wt = split(wt, cyl))
#> Source: local data frame [3 x 3]
#> 
#>     cyl       gear         wt
#>   <dbl>     <list>     <list>
#> 1     4 <dbl [11]> <dbl [11]>
#> 2     6  <dbl [7]>  <dbl [7]>
#> 3     8 <dbl [14]> <dbl [14]>

С тех пор я нашел другой способ сделать это, используя purrr::transpose() :

library(purrr)
library(dplyr)
library(tidyr)

mtcars %>% 
  group_by(cyl) %>% 
  nest(gear, wt) %>% 
  bind_cols(transpose(.$data)) %>% 
  select(-data)
#> Source: local data frame [3 x 3]
#> 
#>     cyl       gear         wt
#>   <dbl>     <list>     <list>
#> 1     6  <dbl [7]>  <dbl [7]>
#> 2     4 <dbl [11]> <dbl [11]>
#> 3     8 <dbl [14]> <dbl [14]>

Самый полезный комментарий

Думаю, самый простой способ:

library(dplyr)

mtcars %>%
  group_by(cyl) %>%
  summarize(gear = list(gear), wt = list(wt))

Я не уверен, достойно ли это нового глагола верхнего уровня или нет.

Не могли бы вы дать немного больше информации о более широком контексте?

Все 3 Комментарий

Думаю, самый простой способ:

library(dplyr)

mtcars %>%
  group_by(cyl) %>%
  summarize(gear = list(gear), wt = list(wt))

Я не уверен, достойно ли это нового глагола верхнего уровня или нет.

Не могли бы вы дать немного больше информации о более широком контексте?

Ваш способ создать результат намного чище.

Непосредственным триггером было создание примеров, чтобы выяснить, почему я не мог unnest() определенных фреймов данных, что оказалось проблемой с dplyr::combine() (https://github.com/hadley/dplyr/ выпусков / 1780).

Я закрою. Если это имеет значение в реальной жизни, это произойдет снова.

Увидев последнее решение, я понял, что summarise_each() - еще один вариант.

library(dplyr)
mtcars %>%
  group_by(cyl) %>%
  summarise_each("list", gear, wt)
#> Source: local data frame [3 x 3]
#> 
#>     cyl       gear         wt
#>   <dbl>     <list>     <list>
#> 1     4 <dbl [11]> <dbl [11]>
#> 2     6  <dbl [7]>  <dbl [7]>
#> 3     8 <dbl [14]> <dbl [14]>
Была ли эта страница полезной?
0 / 5 - 0 рейтинги