dplyrメモ（VA-11 Hall-Aのカクテルのデータと一緒に）

# 目的
VA-11 Hall-Aのカクテルのデータを入力したので、これでdplyrをやってみる。

![Rplot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134781/e09e837b-4048-4f2f-9cf7-2cad40a165be.png)

```
dd <- dd %>% mutate(Material = factor(Material,
 levels = c('Adelhyde','Bronson Ext','Pwd Delta','Flanergide','Karmotrine')))

p <- ggplot(dd)
p <- p + geom_col(aes(x = Material, y = Qty, fill = Material))
p <- p + geom_text(aes(x = Material, y = Qty, label = Qty), nudge_y = 0.6)
p <- p + facet_wrap(~str_c(Name,Opt))
p <- p + scale_y_continuous(minor_breaks = NULL,limits = c(0, 10), breaks = 0:10, expand = c(0,0))
p <- p + theme(axis.text.x = element_text(angle = 90, vjust = 0.4))
p <- p + scale_fill_manual(values = c(rgb(226,39,67, maxColorValue = 255),
                                      rgb(254,199,61, maxColorValue = 255),
                                      rgb(135,166,227, maxColorValue = 255),
                                      rgb(161,199,113, maxColorValue = 255),
                                      rgb(197,228,228, maxColorValue = 255)
))
p
```
![cocktails.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134781/a177bd17-9d45-002d-ecbd-9459d65671ce.png)



```
No,Name,Adelhyde,Bronson Ext,Pwd Delta,Flanergide,Karmotrine,Opt,Age,Ice,Blend
1,Bad Touch,,2,2,2,4,,,T,
2,Beer,1,2,1,2,4,,,,
3,Bleeding Jane,,1,3,3,,,,,T
4,Bloom Light,4,,1,2,3,,T,T,
5,Blue Fairy,4,,,1,,T,T,,
6,Brandtini,6,,3,,1,,T,,
7,Cobalt Velvet,2,,,3,5,,,T,
8,Crevice Spike,,,2,4,,T,,,T
9,Fluffy Dream,3,,3,,,T,T,,
10,Fringe Weaver,1,,,,9,,T,,
11,Frothy Water,1,1,1,1,,,T,,
12,Grizzly Temple,3,3,3,,1,,,,T
13,Gut Punch,,5,,1,,T,T,,
14,Marsblast,,6,1,4,2,,,,T
15,Mercury Blast,1,1,3,3,2,,,T,T
16,Moonblast,6,,1,1,2,,,T,T
17,Piano Man,2,3,5,5,3,,,T,
18,Piano Woman,5,5,2,3,3,,T,,
19,Piledriver,,3,,3,4,,,,
20,Sparkle Star,2,,1,,,T,T,,
21,Sugar Rush,2,,1,,,T,,,
22,Sunshine Cloud,2,2,,,,T,,T,T
23,Suplex,,4,,3,3,,,T,
24,Zen Star,4,4,4,4,4,,,T,
```
# 読み込みと表示

read_csv関数を使う。

```
> d <- read_csv('VA-11 Hall-A.csv')
> d
# A tibble: 24 x 11
      No Name          Adelhyde `Bronson Ext` `Pwd Delta` Flanergide Karmotrine Opt   Age   Ice   Blend
   <int> <chr>            <int>         <int>       <int>      <int>      <int> <lgl> <lgl> <lgl> <lgl>
 1     1 Bad Touch           NA             2           2          2          4 NA    NA    TRUE  NA   
 2     2 Beer                 1             2           1          2          4 NA    NA    NA    NA   
 3     3 Bleeding Jane       NA             1           3          3         NA NA    NA    NA    TRUE 
 4     4 Bloom Light          4            NA           1          2          3 NA    TRUE  TRUE  NA   
 5     5 Blue Fairy           4            NA          NA          1         NA TRUE  TRUE  NA    NA   
 6     6 Brandtini            6            NA           3         NA          1 NA    TRUE  NA    NA   
 7     7 Cobalt Velvet        2            NA          NA          3          5 NA    NA    TRUE  NA   
 8     8 Crevice Spike       NA            NA           2          4         NA TRUE  NA    NA    TRUE 
 9     9 Fluffy Dream         3            NA           3         NA         NA TRUE  TRUE  NA    NA   
10    10 Fringe Weaver        1            NA          NA         NA          9 NA    TRUE  NA    NA   
# ... with 14 more rows
```
# とりあえずビール

filter関数。

```
> d %>% filter(Name == 'Beer')
# A tibble: 1 x 11
     No Name  Adelhyde `Bronson Ext` `Pwd Delta` Flanergide Karmotrine Opt   Age   Ice   Blend
  <int> <chr>    <int>         <int>       <int>      <int>      <int> <lgl> <lgl> <lgl> <lgl>
1     2 Beer         1             2           1          2          4 NA    NA    NA    NA   
```
# なんとかブラスト

str_detect関数。blastとBlastが混在していたのでstr_to_upper関数も使った。

```
> d %>% filter(T == str_detect(str_to_upper(Name), 'BLAST'))
# A tibble: 3 x 11
     No Name          Adelhyde `Bronson Ext` `Pwd Delta` Flanergide Karmotrine Opt   Age   Ice   Blend
  <int> <chr>            <int>         <int>       <int>      <int>      <int> <lgl> <lgl> <lgl> <lgl>
1    14 Marsblast           NA             6           1          4          2 NA    NA    NA    TRUE 
2    15 Mercury Blast        1             1           3          3          2 NA    NA    TRUE  TRUE 
3    16 Moonblast            6            NA           1          1          2 NA    NA    TRUE  TRUE 
```

# Adelhydeってよく使うの？

group_by関数を使ってAdelhydeの含有量ごとにまとめたが、それ以降でnを普通の列として取り扱うためにはungroup関数を使う必要がある。
入っていないカクテルは７種類。入っているものだと、２つ投入するカクテルが５種類で一番多い。

```
> d %>% group_by(Adelhyde) %>% count()
# A tibble: 7 x 2
# Groups:   Adelhyde [7]
  Adelhyde     n
     <int> <int>
1        1     4
2        2     5
3        3     2
4        4     3
5        5     1
6        6     2
7       NA     7
> d %>% group_by(Adelhyde) %>% count() %>% ungroup() %>%
+     filter(F == is.na(Adelhyde)) %>% filter(n == max(n))
# A tibble: 1 x 2
  Adelhyde     n
     <int> <int>
1        2     5
```
# じゃあAdelhydeを2つ使っているカクテルを教えて。

n関数。上で個数として出てきたnは関数としても使える。Adelhydeを含有量ごとにまとめて、要素数が５となるものを抜き出している。

```
> d %>% group_by(Adelhyde) %>% filter(n() == 5)
# A tibble: 5 x 11
# Groups:   Adelhyde [1]
     No Name           Adelhyde `Bronson Ext` `Pwd Delta` Flanergide Karmotrine Opt   Age   Ice   Blend
  <int> <chr>             <int>         <int>       <int>      <int>      <int> <lgl> <lgl> <lgl> <lgl>
1     7 Cobalt Velvet         2            NA          NA          3          5 NA    NA    TRUE  NA   
2    17 Piano Man             2             3           5          5          3 NA    NA    TRUE  NA   
3    20 Sparkle Star          2            NA           1         NA         NA TRUE  TRUE  NA    NA   
4    21 Sugar Rush            2            NA           1         NA         NA TRUE  NA    NA    NA   
5    22 Sunshine Cloud        2             2          NA         NA         NA TRUE  NA    TRUE  TRUE 
```

確かに、以下のほうが簡単。

```
> d %>% filter(Adelhyde == 2)
# A tibble: 5 x 11
     No Name           Adelhyde `Bronson Ext` `Pwd Delta` Flanergide Karmotrine Opt   Age   Ice   Blend
  <int> <chr>             <int>         <int>       <int>      <int>      <int> <lgl> <lgl> <lgl> <lgl>
1     7 Cobalt Velvet         2            NA          NA          3          5 NA    NA    TRUE  NA   
2    17 Piano Man             2             3           5          5          3 NA    NA    TRUE  NA   
3    20 Sparkle Star          2            NA           1         NA         NA TRUE  TRUE  NA    NA   
4    21 Sugar Rush            2            NA           1         NA         NA TRUE  NA    NA    NA   
5    22 Sunshine Cloud        2             2          NA         NA         NA TRUE  NA    TRUE  TRUE 
```

# 同じ材料でできているカクテルってあるの？

データの重複を調べるときにn関数が活躍する。Sparkle StarとSuger Rush、材料同じなんだ。知らなかった。

```
> d %>% group_by(Adelhyde, `Bronson Ext`, `Pwd Delta`, Flanergide, Karmotrine) %>% filter(n() != 1)
# A tibble: 2 x 11
# Groups:   Adelhyde, Bronson Ext, Pwd Delta, Flanergide, Karmotrine [1]
     No Name         Adelhyde `Bronson Ext` `Pwd Delta` Flanergide Karmotrine Opt   Age   Ice   Blend
  <int> <chr>           <int>         <int>       <int>      <int>      <int> <lgl> <lgl> <lgl> <lgl>
1    20 Sparkle Star        2            NA           1         NA         NA TRUE  TRUE  NA    NA   
2    21 Sugar Rush          2            NA           1         NA         NA TRUE  NA    NA    NA   
```


```
dd <- d %>% select(-Age, -Ice, -Blend) %>% gather(Material, Qty, -No, -Name, -Opt)
dd <- dd %>% mutate(Opt := str_c(Opt)) %>% mutate(Opt = case_when(
    Opt == 'TRUE' ~ ', Opt K',
    T ~ ""
))
```