解析前には研究データを解析出来るように加工する機会が多くあります。
その中でも最低限使えると助かる技術を紹介します。
以下紹介するハンドリング技術は主にrmsパッケージを使用していますので、
ご覧頂く前にrmsパッケージをインストールしてlibrary(rms)
まで実行を済ませてください。
このページで紹介するハンドリング
・変数名を変える(rename)
・変数ラベルを付与する(label)
・変数をデータフレームに残す(keep)
・変数をデータフレームから削除する(drop)
・データを並べ替える(sort)
・グループの最初/最後の行を取得する(first/last)
「文字列操作」、「2つのデータの結合」、「縦→横、横→縦変換」については別ページで紹介します。
データについて
今回は次のようなデータを取り扱うことにします。
id | arm | age | sex_c | sex_n | bmi | ha1c0 | sbp0 | asa0 |
---|---|---|---|---|---|---|---|---|
1 | コントロール | 79 | 男性 | 1 | 26.12 | 11.0 | 134 | 1 |
2 | 介入 | 61 | 男性 | 1 | 39.48 | 10.8 | 188 | 1 |
3 | コントロール | 64 | 女性 | 0 | 26.11 | 14.1 | 141 | 0 |
4 | コントロール | 47 | 男性 | 1 | 31.17 | 8.0 | 136 | 0 |
5 | コントロール | 47 | 男性 | 1 | 27.61 | 8.1 | 164 | 0 |
このデータを読み込むためのサンプルコードはこちらになります。
詳しくは、こちらを参照ください。
【Rでデータハンドリング】RコードでDropboxのCSVファイルを直接読み込む
https://qiita.com/ishihara_airport/private/907b1fb9ae118ddacfb0
library(dplyr)
data <-
"https://www.dropbox.com/s/rc1j53415f2l06r/DMRCT180_sum.csv?raw=1" %>%
url %>%
read.csv(na.strings = c("", "#VALUE!"))
upData関数の基本
upData
関数の基本ですが、第一引数には操作するデータ名を記載します。
いまは、data
というデータを操作して、newdata
という新しいデータを作ります。
第二引数以降は、データの操作を記載していきます。データの操作は、「,(カンマ)」で区切って複数書くことができます。
newdata = upData(data,…
#第二引数以降はデータの操作を記載)
この基本を押さえた上でデータハンドリングを身につけましょう。
変数名を変える(rename)
rms
のupData
関数を使います。
newdata = upData(data,
rename=list(id ="ID", #元の名前=新たな名前
sex_c = "gender_c"))
変数ラベルを付与する(label)
sex_nにラベルをつけたsex_lという変数を作ります。
newdata = upData(data,
sex_l = factor(sex_n,levels=c("0", "1"), labels=c("女", "男"))
)
levels=
には元の変数のカテゴリを、labels=
にはつけるラベルを順に記載します。
変数をデータフレームに残す(keep)
この操作では、upData
関数は使わず、subset
関数を使います。
newdata = subset(data, select = c(id,age,sex_n,ha1c0))
select =
の後に残したい変数を書きましょう。
変数をデータフレームから削除する(drop)
newdata = upData(data,drop = c("sbp0"))
upData
内でdrop =
の後に削除したい変数を書きましょう。
データを並べ替える(sort)
dplyr
パッケージを使う方法が簡潔で応用も効かせやすいので、こちらを紹介します。
library(dplyr)
newdata =
data %>%
arrange(arm,id)
arrenge
の中に並べ替えたい順に記載します。
arm,id
の順で記載すると、まず、arm
で並び替えた中でid
順に並び替えてくれます。
グループの最初/最後の行を取得する(first/last)
dplyr
パッケージを使います。
今回グループはarm
として、その中で最初の行を取得します。
また最初や最後の行を取得するときには、並び替え(sort)も同時に行うということをクセ付けるようにしましょう。
library(dplyr)
newdata =
data %>%
arrange(arm,id) %>%
group_by(arm) %>%
filter(row_number()==1)
まずは並び替えるためにarrange
を使ってarm
内をid
順に並び替えます。
次に今回のグループはarm
ですので、group_by
でarm
のグループ指定をします。
この2つの処理をした後に、filter(row_number()==1)
で最初の行に絞り込みます。row_number()==
はグループ内で連番をつけてくれているとイメージしましょう。これを覚えておくと、2番目をとってくることもできますし、最後の行のコードもイメージしやすくなります。
グループ内の最後の行を取得するコードは下記になります。
library(dplyr)
newdata =
data %>%
group_by(arm) %>%
arrange(arm,id) %>%
filter(row_number()==n())
row_number()==n()
という部分が変化しただけです。
以上。