subset()でデータを抽出
東京大学医学部老年病科の矢可部です。
基礎、臨床研究の統計解析でRを用いています。
学生や研修医の指導に使うという目的もあり、noteに記事を書いています。
今回は、元データから条件に合うデータを抽出するやり方を紹介します。
使うのはsubset関数です。
サンプルデータ
この記事で扱うデータが入った"Rdata1.xlsx"ファイルは、下からダウンロードできます。なおこれは前回の記事で用いたものと同じなので、すでにダウンロードした方は不要です。
データをRにコピペする
Rdata1.xlsxに入っている20名分のデータをRにコピペします。
詳しいやり方は以前の記事をご覧ください。
コマンドは以下の通りです。
20名分のデータをdatという名前で保存しました。
このdatの中から、男性のみを抽出します。
subset()でデータを抽出する
以下のコマンドを入力します。
これで、datのうちsexが0のデータだけが抽出されました。
以下のように表示されるはずです。
Rの場合「等しい」を意味するのは"=="です。イコールを2つ書くことに注意して下さい。
さらに、その群をMaleと定義することで、男性のみを対象とした解析ができます。
前回の記事の方法で、各項目の平均、分散、中央値などを求めてみましょう。
年齢については、以下のようなコマンドになります。
実行すると、以下のように表示されます。
また、数字の範囲を指定して抽出することもできます。
条件で「かつ」を意味するのは"&", 「または」を意味するのは"|"(バーティカルライン)です。
Older, Middle, YOを表示すると以下のようになります。
より高度な方法として、同時に複数の変数の条件で絞り込むこともできます。
上のように( )を使って条件をまとめ、&で繋ぎます。
NNを表示すると以下のようになります。
練習問題
RはExcelより便利
私はRを使ううちに、Excelより便利だと感じるようになりました。
それまではExcelを用いて統計量を計算していました。平均ならAVERAGE関数、標準偏差ならSTDEV関数を用いるといった具合です。そのためにはデータ範囲を選択しなければなりません。
データ全体のものを求める場合は、列全体を選択すればよいので楽です。
しかしサブグループで求めるのはより手間がかかります。
たとえば男性の平均年齢を求めるには、データ全体にフィルターをかけて男性と女性をソートするよう並び替え、男性の年齢の範囲だけを選択して、セルに入力する必要がありました。
さらに、たとえば年齢を「64歳以下」「65歳以上74歳以下」「75歳以上」のように複数のグループで分けて解析する場合、選択する作業はより煩雑になります。
そのような作業も、Rを使うと解説のように簡単にできます。
subset()関数は有用ですので、ぜひ使いこなしてください。
さらにsubset()関数を用いて抽出したデータについて、統計的検定を行うことができます。それは今後記事にしたいと思います。