Tidyr: Comment imbriquer dans des colonnes de liste individuelles par rapport à une liste de blocs de données ?

Créé le 6 mai 2016  ·  3Commentaires  ·  Source: tidyverse/tidyr

Comme indiqué (https://github.com/hadley/dplyr/issues/1800), je poste cette question ici.

Quelle est la meilleure façon de faire cette variation sur l'imbrication d'un bloc de données ? Je ne voulais pas utiliser tidyr::nest() parce que je ne voulais pas que les autres variables soient enterrées dans des blocs de données - je les voulais sous forme de colonnes de liste individuelles. Quelque chose comme ça :

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

Depuis, j'ai trouvé un autre moyen de le faire en utilisant 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]>

Commentaire le plus utile

Je pense que le moyen le plus simple est probablement:

library(dplyr)

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

Je ne sais pas si cela mérite un nouveau verbe de haut niveau ou non.

Pourriez-vous donner un peu plus d'informations sur le contexte plus large?

Tous les 3 commentaires

Je pense que le moyen le plus simple est probablement:

library(dplyr)

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

Je ne sais pas si cela mérite un nouveau verbe de haut niveau ou non.

Pourriez-vous donner un peu plus d'informations sur le contexte plus large?

Votre façon de créer le résultat est beaucoup plus propre.

Le déclencheur immédiat a été de créer des exemples pour comprendre pourquoi je ne pouvais pas unnest() certaines trames de données, ce qui s'est avéré être un problème avec dplyr::combine() (https://github.com/hadley/dplyr/ numéros/1780).

Je vais fermer. Si cela compte dans la vraie vie, cela reviendra.

Voir la dernière solution me fait réaliser que summarise_each() est une autre option.

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]>
Cette page vous a été utile?
0 / 5 - 0 notes