Tidyr: Como aninhar em colunas de lista individuais vs lista de quadros de dados?

Criado em 6 mai. 2016  ·  3Comentários  ·  Fonte: tidyverse/tidyr

Conforme instruído (https://github.com/hadley/dplyr/issues/1800), estou postando esta pergunta aqui.

Qual é a melhor maneira de fazer essa variação no aninhamento de um quadro de dados? Eu não queria usar tidyr::nest() porque não queria as outras variáveis ​​enterradas em frames de dados - eu as queria como colunas de lista individuais. Sthg assim:

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]>

Desde então, descobri outra maneira de fazer isso usando 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]>

Comentários muito úteis

Acho que a maneira mais simples é provavelmente:

library(dplyr)

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

Não tenho certeza se isso é digno de um novo verbo de nível superior ou não.

Você poderia dar um pouco mais de informação sobre o contexto mais amplo?

Todos 3 comentários

Acho que a maneira mais simples é provavelmente:

library(dplyr)

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

Não tenho certeza se isso é digno de um novo verbo de nível superior ou não.

Você poderia dar um pouco mais de informação sobre o contexto mais amplo?

Sua maneira de criar o resultado é muito mais limpa.

O gatilho imediato foi criar exemplos para descobrir por que eu não conseguia unnest() certos frames de dados, o que acabou sendo um problema com dplyr::combine() (https://github.com/hadley/dplyr/ edições / 1780).

Eu vou fechar. Se isso for importante na vida real, aparecerá novamente.

Ver a última solução me fez perceber que summarise_each() é outra opção.

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]>
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

voxnonecho picture voxnonecho  ·  30Comentários

MarcusWalz picture MarcusWalz  ·  16Comentários

PMSeitzer picture PMSeitzer  ·  9Comentários

mattantaliss picture mattantaliss  ·  25Comentários

ThierryO picture ThierryO  ·  12Comentários