前回の記事から第2章が始まりました。

第1章:Rの基本的な使い方について知る
第2章:データの扱いに慣れる

【2-1】Rのfor関数、apply関数を使ってまとめて標準偏差などの統計量を求める方法


スクリーンショット 2019-02-08 10.33.40

今回は「合計」など新たな列を追加したり、すでにある列を修正するmutate関数について紹介します。

mutate関数は前回の記事でも行ったパイプ演算子(%>%)と一緒に使うことが多いので、パイプ演算子の練習の意味も含めて紹介していきます。


今回は前回の記事のデータを使います。

data01.xlsx 

ダウンロードした後、プロジェクトの指定フォルダにファイルを移動させておけば、以下のコマンドで上記の画面まで進みます。

library(readxl)
data01 <- read_excel("data01.xlsx", sheet = "日本語")
data01$性別 <- factor(data01$性別, levels = c("男性","女性"))
data01$歩行 <- as.factor(data01$歩行)
head(data01)

*注意
もしプロジェクトファイルを作成していない場合はgetwd()と打ち込むと作業フォルダが表示されます、作業フォルダにExcelデータを入れると後は同じです。

getwd()


1.mutate関数を使ってBMIの列を作る

library(tidyverse)  #既に実行していたらなくても可
data01_bmi <- mutate(data01, BMI = 体重 / (身長 / 100)^2)
data01_bmi

スクリーンショット 2019-02-08 13.51.51
つまり今回は以下の3つは同じ意味になります。
data01_bmi <- mutate(data01, data01$BMI = data01$体重 / (身長 / 100)^2)
data01_bmi <- mutate(data01, BMI = .$体重 / (.$身長 / 100)^2)
data01_bmi <- mutate(data01, BMI = 体重 / (身長 / 100)^2)


スクリーンショット 2019-02-08 11.14.23

2乗は ^ を使います。
5の2乗は5^2となりますが、5 ^ 2のようにスペースは空けずにくっつけて使います
+ - * / は前後にスペースを入れて使います()
, は,の後にだけスペースを入れます。前に入れません
%>%はくっつけて使い、前後にスペースを入れます


data01 <- mutate(・・・)とdata01自体を修正すると、コードを振り返る時にどこからがBMIを追加する前のdata01で、どこからがBMIを追加した後のdata01かわからなくなるので、今回は新たにdata01_bmiという変数名を作りました。


1つ注意点なのですが、変数名や列の名前にカンマ( , )やドット( . )、ハイフン( - )をつけないようにしましょう。これらは計算式とご認識されて後でめんどくさいことになります。
対策としてはアンダーバー( _ )を使います。



1−2.パイプ演算子とmutate関数をで同じことをする

今度はパイプ演算子を使って同じことをします。

パイプ演算子(%>%)は解析の流れをスムーズにしてくれます。
データ① %>%
    プログラム② %>%
    プログラム③ %>%
    プログラム④
とすると先程のdata01_selectの用な変数を介することもなく、データ①をプログラム②に送り、その結果をプログラム③に送り、その結果をプログラム④に送るといったことが可能になります
【2-1】Rのfor関数、apply関数を使ってまとめて標準偏差などの統計量を求める方法より引用

library(tidyverse)  #既に実行していたらなくても可
data01_bmi <- data01 %>% mutate(BMI = 体重 / (身長 / 100)^2)
data01_bmi

スクリーンショット 2019-02-08 14.02.31
スクリーンショット 2019-02-08 14.10.43


同じ結果になります。

%>%なんでめんどくさいのでは・・・?と思うかもしれませんが、今回はmutate関数1行で終わる課題だからです。何行もかかるプログラムの時に効果を発揮します。

下の2つのケースではapply関数の後「あれ、小数点以下多すぎ!」となったので結果をそのまま%>%でつないでround関数を使おう!といった使い方ができます。

スクリーンショット 2019-02-05 0.57.27

スクリーンショット 2019-02-05 1.13.08

【2-1】Rのfor関数、apply関数を使ってまとめて標準偏差などの統計量を求める方法


2.既にある列を修正する

次は既にある列を修正します。

今回は以前も紹介した型の変更を行います。
このページの最初に使ったコードをパイプ演算子を使うと以下のようになります。

比較してみてください。
library(readxl)
data01 <- read_excel("data01.xlsx", sheet = "日本語")
data01$性別 <- factor(data01$性別, levels = c("男性","女性"))
data01$歩行 <- as.factor(data01$歩行)
head(data01)

library(tidyverse)
library(readxl)
data01 <- read_excel("data01.xlsx", sheet = "日本語")
data01 <- data01 %>% 
  mutate(性別 = factor(.$性別, levels = c("男性","女性"))) %>% 
  mutate(歩行 = as.factor(.$歩行))
head(data01)
スクリーンショット 2019-02-08 15.05.44

今回は型の修正だけなので、data01に上書きしました。

mutate関数の列の追加か修正は名前が既にあるものであれば「修正(上書き)」され、無いものであれば新しく列が追加されます。


まとめ

今回はmutate関数とパイプ演算子の使い方を練習しました。

修正はdata01$性別 <- 〇〇でもいいのですが、パイプ演算子でつなぎたい場合はmutate関数を使うと覚えておくとわかりやすいです。

mutate関数を使うと「FIMの合計点」とかだけでなく、年齢を「年代ごとに分類する」だったり、ある評価の「カットオフ値以上とそれ以下」に分けた列をExcelを使わずに作成することができます。

 次回もmutate関数を使ってそのような新しい列の作成を行っていきます。