2017-04-22 15 views
1

自分自身でR tidyverse purr()パッケージを教えており、ネストされたデータフレームの列にmap()を実装する際に問題があります。誰かが私が逃していることを説明できますか?私が最初にそうようなダイエット#1のフィルタ場合、私は簡単ダイエット#1の下に各時点のための観測値の数を取得することができ、例として基地R ChickWeightデータセットを使用しネストされたデータフレームの列にmap()を実装する

library(tidyverse) 
ChickWeight %>% 
    filter(Diet == 1) %>% 
    group_by(Time) %>% 
    summarise(counts = n_distinct(Chick)) 

これは大きいものの私は一度に各食事のためにそれをやりたいと思いますし、データを入れ子にしてmap()で反復することが良いアプローチになると思いました。 これは私がやったことです:私はそれを置くために、パイプを使用して、この同じコマンドを試してみて、実装する場合しかしながら、

map(example$data, ~ .x %>% group_by(Time) %>% summarise(counts = n_distinct(Chick))) 

:このマップ機能を実装

example <- ChickWeight %>% 
    nest(-Diet) 

は、私が目指してるものを実現それが失敗した元のデータフレームの別の列。

example %>% 
    mutate(counts = map(data, ~ .x %>% group_by(Time) %>% summarise(counts = n_distinct(Chick)))) 
Error in eval(substitute(expr), envir, enclos) : 
    variable 'Chick' not found 

どうしてですか?


データフレームをリストに分割してみましたが、機能しませんでした。

ChickWeight %>% 
    split(.$Diet) %>% 
    map(data, ~ .x %>% group_by(Time) %>% summarise(counts = n_distinct(Chick))) 

答えて

4

あなたがdplyr NSEの内側dplyr非標準的な評価を使用しているので、Chickを検索するどのような環境について混乱になっています。それは本当に、おそらくバグだが、それが見えるように指定し、開発版の新.data代名詞、で回避することができます。

library(tidyverse) 

ChickWeight %>% 
    nest(-Diet) %>% 
    mutate(counts = map(data, 
         ~.x %>% group_by(Time) %>% 
          summarise(counts = n_distinct(.data$Chick)))) 
#> # A tibble: 4 × 3 
#>  Diet    data   counts 
#> <fctr>    <list>   <list> 
#> 1  1 <tibble [220 × 3]> <tibble [12 × 2]> 
#> 2  2 <tibble [120 × 3]> <tibble [12 × 2]> 
#> 3  3 <tibble [120 × 3]> <tibble [12 × 2]> 
#> 4  4 <tibble [118 × 3]> <tibble [12 × 2]> 

パイプにリストを、ブランクmapの最初のパラメータを残します繰り返し処理の対象リストに渡します

ChickWeight %>% 
    split(.$Diet) %>% 
    map(~ .x %>% group_by(Time) %>% summarise(counts = n_distinct(Chick))) %>% .[[1]] 

#> # A tibble: 12 × 2 
#>  Time counts 
#> <dbl> <int> 
#> 1  0  20 
#> 2  2  20 
#> 3  4  19 
#> 4  6  19 
#> 5  8  19 
#> 6  10  19 
#> 7  12  19 
#> 8  14  18 
#> 9  16  17 
#> 10 18  17 
#> 11 20  17 
#> 12 21  16 

単純なオプションは、両方の列でちょうどグループに次のようになります。

ChickWeight %>% group_by(Diet, Time) %>% summarise(counts = n_distinct(Chick)) 

#> Source: local data frame [48 x 3] 
#> Groups: Diet [?] 
#> 
#>  Diet Time counts 
#> <fctr> <dbl> <int> 
#> 1  1  0  20 
#> 2  1  2  20 
#> 3  1  4  19 
#> 4  1  6  19 
#> 5  1  8  19 
#> 6  1 10  19 
#> 7  1 12  19 
#> 8  1 14  18 
#> 9  1 16  17 
#> 10  1 18  17 
#> # ... with 38 more rows 
+0

https://github.com/tidyverse/tidyverseの開発版を意味しますか?私はちょうどそれ(バージョン1.1.1.9000)を再インストールし、 '.data'を見つけることができません。 mutate_impl(.data、dots)のエラー:オブジェクト '.data'が見つかりませんでした。 –

+1

Devel dplyrは、[ここ](https://github.com/hadley/dplyr/)からインストールできます。 – alistaire

関連する問題