# ←この記号の後は次の改行までコメントになります。

# データフレーム編
# 統計解析で最も重要なデータ(患者データ・実験データなど)はRではデータフレームと
# して扱うことがほとんどです。すなわち、データフレーム操作に習熟することは、データ
# 操作の点でRの操作を学ぶことのゴールと言えます。

# データフレームとは何か?データフレームを作る、データフレームをファイルから読む、
# データフレームを編集する。の順で説明します。

# データフレームとは何か?
# 複数の同じ長さ(=サンプル数)のベクター(Lesson3-4で説明しました)をまとめて
# 束ねたオブジェクトである。
# Excelなどの表計算ソフトで、行を患者、列をそれぞれのベクター(変数)と考えると
# わかりやすい。
# 実際にデータフレームを見てみましょう。
library(datasets) # Rに備え付けのデータを読み込みます。
# 虫除け6製品の効果のデータです。N=72
# 1列目のcountには虫の数が、2列目のsprayには虫除けスプレーの商品記号(A-F)が入っています。
# データフレームに対してsummary関数を使うと、含まれる全てのベクターの要約統計量を示します。
summary(InsectSprays) 
##      count       spray 
##  Min.   : 0.00   A:12  
##  1st Qu.: 3.00   B:12  
##  Median : 7.00   C:12  
##  Mean   : 9.50   D:12  
##  3rd Qu.:14.25   E:12  
##  Max.   :26.00   F:12
# ちょっとお遊びに、製品ごとのヒストグラムを書いてみましょう。
boxplot(count~spray,data=InsectSprays)

# 2列目の製品ごとに、虫の寄ってくる数が示されています。CDEがよく効くようです。

# データフレームを作る
# Lesson 4のデータをデータフレームにまとめてみましょう。
# data.frame関数を使います
# データフレーム名 <- data.frame(列1 = ...、列2 = ...、列3 = ...)
dataset.lesson5<-
  data.frame(
    Age=c(63,82,62,58,71,60,64,74,89,72),
    Sex=c("Male","Male","Female","Male","Female","Female","Male","Male","Male","Female"),
    Stage=ordered(c(1,3,2,2,4,1,3,2,2,3),labels=c("I","II","IIIa","IIIb"))
  )
head(dataset.lesson5) # データフレームの先頭から5行を見てみます
##   Age    Sex Stage
## 1  63   Male     I
## 2  82   Male  IIIa
## 3  62 Female    II
## 4  58   Male    II
## 5  71 Female  IIIb
## 6  60 Female     I
head(dataset.lesson5,8) # 見る範囲を増やすこともできます
##   Age    Sex Stage
## 1  63   Male     I
## 2  82   Male  IIIa
## 3  62 Female    II
## 4  58   Male    II
## 5  71 Female  IIIb
## 6  60 Female     I
## 7  64   Male  IIIa
## 8  74   Male    II
summary(dataset.lesson5) # 全体の要約統計
##       Age            Sex     Stage  
##  Min.   :58.00   Female:4   I   :2  
##  1st Qu.:62.25   Male  :6   II  :4  
##  Median :67.50              IIIa:3  
##  Mean   :69.50              IIIb:1  
##  3rd Qu.:73.50                      
##  Max.   :89.00
# データフレームはディスクに保存してあるcsvファイルなどから読み出すこともできます。
# 上で作ったデータフレームをcsvファイルにしてディスクに保存します。
write.csv(dataset.lesson5,file="dataset.lesson5.csv")

# RStudioを使っていたら、右下のウィンドウからFilesタグをクリックしてみて下さい。
# dataset.lesson5.csvというファイルができているはずです。

# read.csv関数をつかってディスクからデータを読み出す。
# 今までのdataset.lesson5は上書きされます。
# header=Tとは先頭行を変数名として使いますということです。
dataset.lesson5<-read.csv("dataset.lesson5.csv",header=T)
summary(dataset.lesson5)
##        X              Age            Sex     Stage  
##  Min.   : 1.00   Min.   :58.00   Female:4   I   :2  
##  1st Qu.: 3.25   1st Qu.:62.25   Male  :6   II  :4  
##  Median : 5.50   Median :67.50              IIIa:3  
##  Mean   : 5.50   Mean   :69.50              IIIb:1  
##  3rd Qu.: 7.75   3rd Qu.:73.50                      
##  Max.   :10.00   Max.   :89.00
# データフレームの編集
# 読み込む時に先頭行の通し番号も変数Xとして読まれてしまったので、これを削除しましょう
# 幾つか方法がありますが、ここではシンプルな方法を示します。
# データフレーム名$ベクター名でデータフレームに格納されたベクターにアクセスできます。
dataset.lesson5$X<-NULL

# その他に、
# dataset.lesson5[,1]<-NULL としてもOKです。[,1]とは1列目を表す。

# データフレームにベクターを追加する。
# データフレーム名$新しいベクター名 <- データで追加できます。
# rep関数は、値を与えられた回数だけ繰り返す働きをします。
dataset.lesson5$Ethnicity<-
  factor(c(rep("Japanese",4),"Chinese","Japanese","Korean",rep("Japanese",3)))
dataset.lesson5
##    Age    Sex Stage Ethnicity
## 1   63   Male     I  Japanese
## 2   82   Male  IIIa  Japanese
## 3   62 Female    II  Japanese
## 4   58   Male    II  Japanese
## 5   71 Female  IIIb   Chinese
## 6   60 Female     I  Japanese
## 7   64   Male  IIIa    Korean
## 8   74   Male    II  Japanese
## 9   89   Male    II  Japanese
## 10  72 Female  IIIa  Japanese
summary(dataset.lesson5)
##       Age            Sex     Stage      Ethnicity
##  Min.   :58.00   Female:4   I   :2   Chinese :1  
##  1st Qu.:62.25   Male  :6   II  :4   Japanese:8  
##  Median :67.50              IIIa:3   Korean  :1  
##  Mean   :69.50              IIIb:1               
##  3rd Qu.:73.50                                   
##  Max.   :89.00
# データフレームの変数名を変更することができます。
# names関数はデータフレームに含まれるベクターの名前を表示します。
names(dataset.lesson5)
## [1] "Age"       "Sex"       "Stage"     "Ethnicity"
names(dataset.lesson5)<-c("age","sex","stage","ethnicity")
names(dataset.lesson5)
## [1] "age"       "sex"       "stage"     "ethnicity"
summary(dataset.lesson5)
##       age            sex     stage      ethnicity
##  Min.   :58.00   Female:4   I   :2   Chinese :1  
##  1st Qu.:62.25   Male  :6   II  :4   Japanese:8  
##  Median :67.50              IIIa:3   Korean  :1  
##  Mean   :69.50              IIIb:1               
##  3rd Qu.:73.50                                   
##  Max.   :89.00
# 次はデータフレームに含まれるデータを参照して、解析をしてみます。