Tidyr: 個々のリスト列とデータフレームのリストにネストする方法は?

作成日 2016年05月06日  ·  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 評価