#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
あたりをまとめようと思います。
お読みいただきありがとうございました。