Tidyr: Wie kann man in einzelne Listenspalten im Vergleich zu einer Liste von Datenrahmen verschachteln?

Erstellt am 6. Mai 2016  ·  3Kommentare  ·  Quelle: tidyverse/tidyr

Wie angewiesen (https://github.com/hadley/dplyr/issues/1800) poste ich diese Frage hier.

Wie kann man diese Variation beim Verschachteln eines Datenrahmens am besten ausführen? Ich wollte tidyr::nest() weil ich nicht wollte, dass die anderen Variablen in Datenrahmen vergraben sind – ich wollte sie als einzelne Listenspalten. Sthg so:

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

Seitdem habe ich einen anderen Weg gefunden, dies mit purrr::transpose() zu tun:

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

Hilfreichster Kommentar

Ich denke, der einfachste Weg ist wahrscheinlich:

library(dplyr)

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

Ich bin mir nicht sicher, ob dies eines neuen Verbs der obersten Ebene würdig ist oder nicht.

Könnten Sie etwas mehr Informationen zum breiteren Kontext geben?

Alle 3 Kommentare

Ich denke, der einfachste Weg ist wahrscheinlich:

library(dplyr)

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

Ich bin mir nicht sicher, ob dies eines neuen Verbs der obersten Ebene würdig ist oder nicht.

Könnten Sie etwas mehr Informationen zum breiteren Kontext geben?

Ihr Weg, das Ergebnis zu erstellen, ist viel sauberer.

Der unmittelbare Auslöser war das Erstellen von Beispielen, um herauszufinden, warum ich bestimmte Datenrahmen nicht unnest() , was sich als Problem mit dplyr::combine() herausstellte (https://github.com/hadley/dplyr/ Ausgaben/1780).

Ich werde schließen. Wenn dies im wirklichen Leben von Bedeutung ist, wird es wieder auftauchen.

Wenn ich die letzte Lösung sehe, wird mir klar, dass summarise_each() eine weitere Option ist.

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]>
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen