# ←この記号の後は次の改行までコメントになります。
# データフレームの読み込みと選択基準の適用
# 今までのレッスンでは、Rの基本ルールの解説ばかりが続いて飽きてきて
# しまったのではないでしょうか?
# 今回はワークシートからデータを読み込んで、その一部を選択するという
# ことをやってみて、臨床研究の解析第一段階を体験してみましょう。
# 臨床研究のデータセットは、多くの研究者はエクセルなどのワークシートで
# 作っていることが多いでしょう。私もこういうシートを添付したメールで、
# こういう解析をしてくださいと、今まで数え切れないくらい頼まれましたが、
# 送られてきたシートをそのままの形でRに読み込んですぐに解析できたことは
# 一度もありません。
#
# こういうシートは、作者だけがわかるようなフォーマットで作られていて、初
# めてこのシートを見た人(Rも含む)は理解できないことがほとんどです。
#
# Rのコードに移る前に、一般化出来るシートの作り方を簡単に押さえておきます。
#
# 1. フォーマットはcsv(カンマ区切り値)で
# 2. シートは一枚だけ。予めシートを分けて群分けすると読み込みが煩雑になり
# 整合性がとれないことがあり、解析が煩雑になります。
# 3. シートの先頭行の1行「のみ」に変数名を書いて下さい。2行目からデータを。
# 4. 1セル1情報の原則、1つのセルには1人の患者の1種類の情報しか入れてはいけ
# ません。
# 5. ワークシートのn * mの領域の外には何も書かないで。平均値とか書いてある
# ことが多い。
# 6. 機種依存文字などの特殊文字は使わない。できれば、日本語も使わないほう
# が良い。
# ではコードを書いてみましょう。
# まずはデータ空間(Environment)をいったんクリアします。
rm(list=ls())
# ワークシートを作り、ディスクに保存します。Lesson 5で使ったものを修正して
# 流用します(サンプル数を20に増やし、変数を2つ追加しました)。
dataset.lesson5<-
data.frame(
Age=
as.numeric(c(63,82,62,58,71,60,64,74,89,72,74,72,66,84,74,82,65,66,67,57)),
Sex=
factor(c("Male","Male","Female","Male","Female","Female","Male","Male","Male","Female",
"Female","Male","Male","Male","Male","Female","Male","Male","Male","Female")),
FirstEver=
factor(c(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2),
labels=c("No","Yes")),
Stage=
ordered(c(1,3,2,2,4,1,3,2,2,3,4,2,1,2,1,3,3,3,2,2),
labels=c("I","II","IIIa","IIIb")),
OtherMalignancy=
factor(c(1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1),
labels=c("No","Yes"))
)
# write.csv関数を使って保存します。
write.csv(dataset.lesson5,"data5.csv")
# ディレクトリ(パス、フォルダ)の指定がありませんが。
# 未指定の場合、作業ディレクトリ(working directory)に保存されます。
# working directoryを知るには、
getwd()
## [1] "/Users/Atsushi 1/R/REducation"
# setwd関数を使えば、working directoryを指定できます。
# 一旦作ったデータセットを削除しておいて、
rm(dataset.lesson5)
# ディスクに保存したファイルを、read.csv関数を使って読み込みます。これが
# csvファイルを読み込む方法です。ここからがスタートです。
dataset<-
read.csv("data5.csv",header=T)
summary(dataset) # 全体の記述統計
## X Age Sex FirstEver Stage
## Min. : 1.00 Min. :57.00 Female: 7 No : 1 I :4
## 1st Qu.: 5.75 1st Qu.:63.75 Male :13 Yes:19 II :8
## Median :10.50 Median :69.00 IIIa:6
## Mean :10.50 Mean :70.10 IIIb:2
## 3rd Qu.:15.25 3rd Qu.:74.00
## Max. :20.00 Max. :89.00
## OtherMalignancy
## No :18
## Yes: 2
##
##
##
##
nrow(dataset) # サンプル数
## [1] 20
# 一般的にはExcelなどの表計算ソフトで作成したものをcsvとして保存し、それを
# Rに読み込むことが多いでしょう。
# 日本語が入っていて、shift-JISのコーディングが必要な場合、
# read.csv(..., fileEncoding="CP932")
# として、Shift-JISで読み込むように宣言すると通ります。
# やらないと日本語を含むファイルではエラーになります。けっこう大事。
# ここで、このデータセットの中から、
# 選択基準: 60歳以上の初発例(FirstEverがYes)
# 除外基準: Stage I, 他の悪性腫瘍の合併(OtherMalignancyがYes)
# として症例を選択してみましょう。
# 選択基準
Inc.criteria.1<-
dataset$Age>=60 # 年齢が60歳以上
Inc.criteria.2<-
dataset$FirstEver=="Yes" # 初発
table(Inc.criteria.1)
## Inc.criteria.1
## FALSE TRUE
## 2 18
table(Inc.criteria.2)
## Inc.criteria.2
## FALSE TRUE
## 1 19
# 組み入れ基準(Inclusion criteria)は、「全ての基準を満足するもの」を選びます。
# & はExcelで言う AND です。全てTRUEのものがTRUEに、それ以外がFALSEになる。
Inc.criteria<-
Inc.criteria.1&Inc.criteria.2
table(Inc.criteria)
## Inc.criteria
## FALSE TRUE
## 3 17
# まず、組み入れ基準を適用したdataset.1を作ってみましょう。
# subset関数は、元のオブジェクトから条件を満たすものを選択します。
# この場合は元のdatasetから、組み入れ基準が真であるものを選択しています。
dataset.1<-
subset(dataset,Inc.criteria)
summary(dataset.1)
## X Age Sex FirstEver Stage
## Min. : 1.000 Min. :60.00 Female: 6 No : 0 I :4
## 1st Qu.: 6.000 1st Qu.:65.00 Male :11 Yes:17 II :6
## Median :10.000 Median :72.00 IIIa:5
## Mean : 9.882 Mean :71.82 IIIb:2
## 3rd Qu.:14.000 3rd Qu.:74.00
## Max. :19.000 Max. :89.00
## OtherMalignancy
## No :15
## Yes: 2
##
##
##
##
nrow(dataset.1)
## [1] 17
# 除外基準(対象は組入れ基準後を適用した後のdataset.1であることに注意!)
Exc.criteria.1<-
dataset.1$Stage=="I"
Exc.criteria.2<-
dataset.1$OtherMalignancy=="Yes"
# 除外基準は「一つでも基準に合致するもの」を除きます。
# | はExcelで言う OR です。ひとつでもTRUEのものがTRUEに、全部がFALSEだとFALSEになる。
Exc.criteria<-
Exc.criteria.1|Exc.criteria.2
table(Exc.criteria)
## Exc.criteria
## FALSE TRUE
## 11 6
# 次に除外基準を適用したdataset.2を作ってみましょう。
# この場合のsubset関数は、元のdataset.1から除外基準が偽であるものを選択しています。
# ! はExcelで言う NOT です。TRUEはFALSEに、FALSEはTRUEになります。
dataset.2<-
subset(dataset.1,!Exc.criteria)
summary(dataset.2)
## X Age Sex FirstEver Stage
## Min. : 3.00 Min. :62.00 Female:5 No : 0 I :0
## 1st Qu.: 7.50 1st Qu.:68.00 Male :6 Yes:11 II :5
## Median :10.00 Median :72.00 IIIa:4
## Mean :10.18 Mean :73.55 IIIb:2
## 3rd Qu.:13.00 3rd Qu.:78.00
## Max. :17.00 Max. :89.00
## OtherMalignancy
## No :11
## Yes: 0
##
##
##
##
nrow(dataset.2)
## [1] 11
# 11例が選択されました。
# [...] bracketを使って、以下のように選択することもできます。bracketは[...]の中の
# 条件を満たすものを選択します。[行の条件,列の条件]と記載することで、二次元の配列
# に適用することもできます。
dataset.1<-dataset[Inc.criteria,]
dataset.2<-dataset.1[!Exc.criteria,]
summary(dataset.2)
## X Age Sex FirstEver Stage
## Min. : 3.00 Min. :62.00 Female:5 No : 0 I :0
## 1st Qu.: 7.50 1st Qu.:68.00 Male :6 Yes:11 II :5
## Median :10.00 Median :72.00 IIIa:4
## Mean :10.18 Mean :73.55 IIIb:2
## 3rd Qu.:13.00 3rd Qu.:78.00
## Max. :17.00 Max. :89.00
## OtherMalignancy
## No :11
## Yes: 0
##
##
##
##
nrow(dataset.2)
## [1] 11
# 条件式や論理値の扱いは最初は面食らいますが、以上のように臨床研究で選択基準を適用
# したりサブグループを選択する際にとても重要で繁用しますので、慣れておいて下さい。