R初心者はこれを見ろ！便利なパッケージまとめ！入門編

#Rの初心者におすすめなパッケージ
いろいろなパッケージがありますが、その中でも特によく使う！！というものをピック・アップしました。

##data.table
まずはこれ。このパッケージの`fread`は便利。
`read.csv`より遥かに読み込み速度が早くなるし、txtファイルでもok
`a <- fread("hogehoge/hoge.csv")`と使い方は`read.csv`と同じ！


##dplyr
これもデータテーブルをいろいろ変数加工する際には必須といえるパッケージ。
`filter`, `select`, `group_by`, `mutate`, `summarise`あたりは抑えておきたいところ。

順番に見ていくと、
filterは下記から、BrandがABCのものだけ抜き出したいときに使えます。
購買データだと思ってください。
IDは顧客ID,　Weeksは週（1週目～4週目のデータ）, Brandは購入した商品のブランド名で、ABCとDEFは競合ブランドとご理解ください。

```
> table
  ID Weeks Brand
1  A     1   ABC
2  A     2   ABC
3  A     3   DEF
4  A     4   ABC
5  B     1   DEF
6  B     2   DEF
7  B     3   DEF
8  B     4   ABC
> df_ABC <- table %>% dplyr::filter(Brand == "ABC") 
> df_ABC
  ID Weeks Brand
1  A     1   ABC
2  A     2   ABC
3  A     4   ABC
4  B     4   ABC

### %>%はパイプ処理と呼ばれ、shift+ctrl+Mの同時押しで出せます！
### 下記と同意です
### df_ABC <- dplyr::filter(table, Brand == "ABC")

```

こんな具合に、条件にマッチした列だけを抜き出すことができます。

`select`は列の選択。IDとBrandだけの列が欲しい場合に、

```
> df_ABC
  ID Weeks Brand
1  A     1   ABC
2  A     2   ABC
3  A     4   ABC
4  B     4   ABC
> df_ID_Brand <- table %>% dplyr::select(ID, Brand)
> df_ID_Brand
  ID Brand
1  A   ABC
2  A   ABC
3  A   DEF
4  A   ABC
5  B   DEF
6  B   DEF
7  B   DEF
8  B   ABC
```
また、下記でも同じことができます。

```
> df_ID_Brand <- table %>% dplyr::select(1, 3) #列番号でもOK
> df_ID_Brand
  ID Brand
1  A   ABC
2  A   ABC
3  A   DEF
4  A   ABC
5  B   DEF
6  B   DEF
7  B   DEF
8  B   ABC
```
`select`を使わず、

```
> df_ID_Brand <- table[,-2] #2列目を除く
> df_ID_Brand
  ID Brand
1  A   ABC
2  A   ABC
3  A   DEF
4  A   ABC
5  B   DEF
6  B   DEF
7  B   DEF
8  B   ABC
```
としても今回は同じことができます。

`group_by`, `mutate`, `summarise`はまとめて説明しますと、
人毎（IDごと）にABCの購入回数を知りたい場合、

```
> table_2 <- table %>%
   dplyr::group_by(ID) %>% #IDごとに以下の処理が行われる
   dplyr::filter(Brand == "ABC") %>% #ABCだけのレコードにする
   dplyr::mutate(count_ABC = n())　#n()で列数を数える
> table_2
# A tibble: 4 x 4
# Groups:   ID [2]
  ID    Weeks Brand count_ABC
  <chr> <int> <chr>     <int>
1 A         1 ABC           3
2 A         2 ABC           3
3 A         4 ABC           3
4 B         4 ABC           1

#また、ID毎にABCの購入回数だけのテーブルにしたい場合は、
> table_2 <- table_2 %>%
  distinct(ID, .keep_all = TRUE) %>% #ID列で重複するレコードを削除、.keep_all = TRUEでID以外の列を保持
  dplyr::select(ID, count_ABC)　#IDとcount_ABC列だけにする
> table_2
# A tibble: 2 x 2
  ID    count_ABC
  <chr>     <int>
1 A             3
2 B             1
```

`summarise`は`mutate`と似ておりまして、`mutate`では新たな列が追加されましたが、`summarise`ではこうなります。

```
> table_2 <- table %>%
+   dplyr::group_by(ID) %>% 
+   dplyr::filter(Brand == "ABC") %>% 
+   dplyr::summarise(count_ABC = n())
> table_2
# A tibble: 2 x 2
  ID    count_ABC
  <chr>     <int>
1 A             3
2 B             1
```

違いがわかりますかね？？`mutate`を再掲すると、

```
> table_2 <- table %>%
   dplyr::group_by(ID) %>% 
   dplyr::filter(Brand == "ABC") %>% 
   dplyr::mutate(count_ABC = n())
> table_2
# A tibble: 4 x 4
# Groups:   ID [2]
  ID    Weeks Brand count_ABC
  <chr> <int> <chr>     <int>
1 A         1 ABC           3
2 A         2 ABC           3
3 A         4 ABC           3
4 B         4 ABC           1
```

そう！`summarise`では、tableに新たな列が追加されるのではなく、`group_by`で選択した列と`summarise`で作成した列だけのデータテーブルが作成されるのです!




気が向きましたら、次は`inner_join`や`tidyr`の`spread`, `gather`あたりをまとめようと思います。
お読みいただきありがとうございました。