【R言語】dplyrを使えばExcelの集計作業を代替できてしかも速い!
今回はR言語のdplyrの紹介です。
表計算をするなら使いたいパッケージ、それがdplyrです。
などなど・・・dplyrを身につければExcel要らず!になれるはずです。
では早速やってみましょう。
サンプルデータに台湾行政区人口順位表を使います。
ダウンロード
(クリックするとCSVファイルがダウンロードされます。)
CSVファイルの読み込み
まずはダウンロードしたファイルを読み込みます。
Rstudioで以下を実行してください。
taiwan_cities <- read.csv("taiwan_cities.csv", header=TRUE, fileEncoding="UTF-8-BOM")
このファイル、 fileEncoding="UTF-8 とすると読み込めなかったのですが、 fileEncoding="UTF-8-BOM こうすると読み込めました。なんでかはよくわからないです・・・
▼Rstudioでの読み込み結果がこちら
次に、面積、人口、人口密度のクラスを変更します。試しに以下のように入力すると、
class(taiwan_cities$人口) # [1] "factor"
と factor が返ってきます。数値に変換しないといけませんね。
CSV取り込みでよくやる前処理なのですが、ここではカンマを取ってから数値に直す、という処理をしないといけません。面倒ですがやってみましょう。
taiwan_cities$人口 <- gsub(",", "", taiwan_cities$人口)
こうすると、カンマ(",")をスペース("")で置換できます。面積と、人口密度にも同じ処理をしましょう。
さらに、as.numeric()でクラスを数値に変換します。小数点がある場合は、round()で整数にしてしまいましょう。
taiwan_cities$面積 <- round(as.numeric(gsub(",", "", taiwan_cities$面積)), digits = 0)
dplyrで集計をする
分類の列を見ると、直轄市、県、市という値が入っていることがわかります。
この分類ごとに、面積と人口を合計し、さらに人口密度を算出してみましょう。
library(dplyr) taiwan_cities_bunrui <- taiwan_cities %>% dplyr::group_by(分類) %>% summarise(各分類の数 = n(), 面積の合計 = sum(面積), 人口の合計 = sum(人口), 人口密度 = round(人口の合計 / 面積の合計, digits = 0))
結果、こうなります。
ここで、直轄市、県、市のそれぞれの数を知りたかったので、各分類の数 = n()として、個数を数えています。
さらにこれを人口で降順に並べ替えたいなら、arrange()とdesc()を用いて、
taiwan_cities_bunrui <- taiwan_cities_bunrui %>% dplyr::arrange(desc(人口の合計))
とすれば、降順で表示できます。
LEFT JOINで2つのテーブルをくっつける(VLOOKUP的な処理)
次に、各行政区に自分が行ったことがある/ないのテーブルを読み込みましょう。
まずは、CSVをダウンロード。
ダウンロード
(クリックするとCSVファイルがダウンロードされます。)
read.csv()で読み込みましょう。
taiwan_exp <- read.csv("taiwan_exp.csv", header=TRUE, fileEncoding="UTF-8-BOM")
こんなファイルです。
ここには行ったことがある行政区しか載せていないため、最初のファイル(taiwan_cities)とは行の数が合いません。
さて、最初のテーブル(taiwan_cities)と今読み込んだテーブル(taiwan_exp)をLEFT JOINでくっつけてみましょう!
ExcelのVLOOKUPと同じようなことができます。
taiwan_cities_exp <- dplyr::left_join(taiwan_cities, taiwan_exp, by = "行政区")
こんなふうになります!元のテーブルの右側に、列が加わりました。
left_joinの説明をすると、
dplyr::left_join(左側に置きたいテーブル, 右側に置きたいテーブル, by = "キー")
となります。
左側のテーブルを基準としているため、左側のテーブルはすべての行が残りますが、右側のテーブルは必ずしもすべてが残るわけではありません。(今回はたまたま残っていますが。)
また、左側にあって右側にない場合は、NAとなります。(NULLとなります。)
以上の要領でdplyrを駆使していけばマジでExcelいらずになります!
処理も速いし最高ですね。もうExcelには戻れませんよ・・・