Skip to content

Instantly share code, notes, and snippets.

@yutannihilation
Last active July 16, 2018 02:15
Show Gist options
  • Select an option

  • Save yutannihilation/31b47514063396f0e4f499551acf5d6a to your computer and use it in GitHub Desktop.

Select an option

Save yutannihilation/31b47514063396f0e4f499551acf5d6a to your computer and use it in GitHub Desktop.

参考

https://github.com/tidyverse/dplyr/blob/d3ded01ac854cbc847afcb1434f49118cea852e8/vignettes/future/dplyr_0.8.0.Rmd#tidy-grouping-structure

使い方

library(dplyr, warn.conflicts = FALSE)

d <- iris %>%
  group_by(Species)

.rowsは各グループに含まれる行のインデックス

d %>%
  group_data()
#> # A tibble: 3 x 2
#>   Species    .rows     
#>   <fct>      <list>    
#> 1 setosa     <int [50]>
#> 2 versicolor <int [50]>
#> 3 virginica  <int [50]>

中身はintegerのインデックス

d %>%
  group_data() %>%
  pull(.rows)
#> [[1]]
#>  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#> [24] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
#> [47] 47 48 49 50
#> 
#> [[2]]
#>  [1]  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67
#> [18]  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84
#> [35]  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100
#> 
#> [[3]]
#>  [1] 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
#> [18] 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
#> [35] 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150

group_rows()は、group_data() %>% pull(.rows)のショートカット版

d %>%
  group_rows()
#> [[1]]
#>  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#> [24] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
#> [47] 47 48 49 50
#> 
#> [[2]]
#>  [1]  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67
#> [18]  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84
#> [35]  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100
#> 
#> [[3]]
#>  [1] 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
#> [18] 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
#> [35] 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150

実はgroup_by()した時点でインデックスがつくようになってる

attributes(d)
#> $names
#> [1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width" 
#> [5] "Species"     
#> 
#> $class
#> [1] "grouped_df" "tbl_df"     "tbl"        "data.frame"
#> 
#> $row.names
#>   [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17
#>  [18]  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34
#>  [35]  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51
#>  [52]  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68
#>  [69]  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85
#>  [86]  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102
#> [103] 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
#> [120] 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
#> [137] 137 138 139 140 141 142 143 144 145 146 147 148 149 150
#> 
#> $groups
#> # A tibble: 3 x 2
#>   Species    .rows     
#>   <fct>      <list>    
#> 1 setosa     <int [50]>
#> 2 versicolor <int [50]>
#> 3 virginica  <int [50]>

データに操作を加えるとちゃんとattributeにも反映される

d %>%
  filter(Sepal.Length > 5) %>%
  attributes()
#> $class
#> [1] "grouped_df" "tbl_df"     "tbl"        "data.frame"
#> 
#> $row.names
#>   [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17
#>  [18]  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34
#>  [35]  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51
#>  [52]  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68
#>  [69]  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85
#>  [86]  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102
#> [103] 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
#> 
#> $groups
#> # A tibble: 3 x 2
#>   Species    .rows     
#>   <fct>      <list>    
#> 1 setosa     <int [22]>
#> 2 versicolor <int [47]>
#> 3 virginica  <int [49]>
#> 
#> $names
#> [1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width" 
#> [5] "Species"

d[1:5,] %>%
  attributes()
#> $names
#> [1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width" 
#> [5] "Species"     
#> 
#> $row.names
#> [1] 1 2 3 4 5
#> 
#> $class
#> [1] "grouped_df" "tbl_df"     "tbl"        "data.frame"
#> 
#> $groups
#> # A tibble: 3 x 2
#>   Species    .rows    
#>   <fct>      <list>   
#> 1 setosa     <int [5]>
#> 2 versicolor <int [0]>
#> 3 virginica  <int [0]>

Created on 2018-07-16 by the reprex package (v0.2.0).

Session info
devtools::session_info()
#> Session info -------------------------------------------------------------
#>  setting  value                       
#>  version  R version 3.5.1 (2018-07-02)
#>  system   x86_64, mingw32             
#>  ui       RTerm                       
#>  language (EN)                        
#>  collate  Japanese_Japan.932          
#>  tz       Asia/Tokyo                  
#>  date     2018-07-16
#> Packages -----------------------------------------------------------------
#>  package    * version     date       source                          
#>  assertthat   0.2.0       2017-04-11 CRAN (R 3.5.0)                  
#>  backports    1.1.2       2017-12-13 CRAN (R 3.5.0)                  
#>  base       * 3.5.1       2018-07-02 local                           
#>  bindr        0.1.1       2018-03-13 CRAN (R 3.5.0)                  
#>  bindrcpp   * 0.2.2       2018-03-29 CRAN (R 3.5.0)                  
#>  cli          1.0.0       2017-11-05 CRAN (R 3.5.0)                  
#>  compiler     3.5.1       2018-07-02 local                           
#>  crayon       1.3.4       2017-09-16 CRAN (R 3.5.0)                  
#>  datasets   * 3.5.1       2018-07-02 local                           
#>  devtools     1.13.6      2018-06-27 CRAN (R 3.5.0)                  
#>  digest       0.6.15      2018-01-28 CRAN (R 3.5.0)                  
#>  dplyr      * 0.7.99.9000 2018-07-16 local                           
#>  evaluate     0.10.1      2017-06-24 CRAN (R 3.5.0)                  
#>  fansi        0.2.3       2018-05-06 CRAN (R 3.5.1)                  
#>  glue         1.2.0       2017-10-29 CRAN (R 3.5.0)                  
#>  graphics   * 3.5.1       2018-07-02 local                           
#>  grDevices  * 3.5.1       2018-07-02 local                           
#>  htmltools    0.3.6       2017-04-28 CRAN (R 3.5.0)                  
#>  knitr        1.20.2      2018-05-10 local                           
#>  magrittr     1.5         2014-11-22 CRAN (R 3.5.0)                  
#>  memoise      1.1.0       2018-06-13 Github (hadley/memoise@06d16ec) 
#>  methods    * 3.5.1       2018-07-02 local                           
#>  pillar       1.3.0       2018-07-14 CRAN (R 3.5.1)                  
#>  pkgconfig    2.0.1       2017-03-21 CRAN (R 3.5.0)                  
#>  purrr        0.2.5       2018-05-29 CRAN (R 3.5.0)                  
#>  R6           2.2.2       2017-06-17 CRAN (R 3.5.0)                  
#>  Rcpp         0.12.17     2018-05-18 CRAN (R 3.5.0)                  
#>  rlang        0.2.1       2018-05-30 CRAN (R 3.5.0)                  
#>  rmarkdown    1.10        2018-06-11 CRAN (R 3.5.0)                  
#>  rprojroot    1.3-2       2018-01-03 CRAN (R 3.5.0)                  
#>  stats      * 3.5.1       2018-07-02 local                           
#>  stringi      1.2.3       2018-06-12 CRAN (R 3.5.0)                  
#>  stringr      1.3.1       2018-05-10 CRAN (R 3.5.0)                  
#>  tibble       1.4.2       2018-01-22 CRAN (R 3.5.0)                  
#>  tidyselect   0.2.4       2018-02-26 CRAN (R 3.5.0)                  
#>  tools        3.5.1       2018-07-02 local                           
#>  utf8         1.1.4       2018-05-24 CRAN (R 3.5.0)                  
#>  utils      * 3.5.1       2018-07-02 local                           
#>  withr        2.1.2       2018-06-26 Github (jimhester/withr@fe56f20)
#>  yaml         2.1.19      2018-05-01 CRAN (R 3.5.0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment