Posted at

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

summarisemutateと似ておりまして、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_jointidyrspread, gatherあたりをまとめようと思います。

お読みいただきありがとうございました。