2
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

2
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?