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]>
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]>
Comentários muito úteis
Acho que a maneira mais simples é provavelmente:
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?