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

# ベクター編 その2
# ベクター(変数)の種類にはいろいろあります。
# 臨床研究では一般的に、数値変数(年齢など)、名義変数(性別など)、
# 順序変数(ステージなど)、時間変数(年月日など)、論理変数(TrueとFalse)

# 数値変数
Age<-c(63,82,62,58,71,60,64,74,89,72) # 前回と同じ例です。

# 前回の復習で、summary(), table(), mean(), sd(), median(), quantile()
# などの関数を使い、summary(Age)などとして記述統計量の出力に慣れて
# おいてください。
# Rの殆どのオブジェクトに対して、summary()関数は何らかの要約を返します。
# コンソールで最も使う関数の一つです。
Age
##  [1] 63 82 62 58 71 60 64 74 89 72
class(Age) # ベクターの種類を表示します。
## [1] "numeric"
# 名義変数
Sex<-c("Male","Male","Female","Male","Female","Female","Male","Male","Male","Female")
Sex
##  [1] "Male"   "Male"   "Female" "Male"   "Female" "Female" "Male"  
##  [8] "Male"   "Male"   "Female"
class(Sex) #classはベクターの種類を表示する関数です。
## [1] "character"
# Rの内部ではこれは単なる文字の羅列として扱われますが、
Sex<-factor(c("Male","Male","Female","Male","Female","Female","Male","Male","Male","Female"))
Sex
##  [1] Male   Male   Female Male   Female Female Male   Male   Male   Female
## Levels: Female Male
class(Sex)
## [1] "factor"
# factor()を使うことで"Female","Male"の2水準(levels)の名義変数に変換されます。
# class を"character"から"factor"に改めることで、Rの内部では、文字変数は実は
# 数値変数に変換されます。
# この場合は、c(2,2,1,2,1,1,2,2,2,1)というベクターとして保存されていて、それが
# 1->"Female" 2->"Male"と水準が割り当てられています。 
as.numeric(Sex)
##  [1] 2 2 1 2 1 1 2 2 2 1
levels(Sex)
## [1] "Female" "Male"
str(Sex) #もっと詳しく見たいときにはstr関数を使う。
##  Factor w/ 2 levels "Female","Male": 2 2 1 2 1 1 2 2 2 1
# 数値と名義(labels)を直接指定して名義変数を作ることもできます。
Sex<-factor(c(2,2,1,2,1,1,2,2,2,1),labels=c("Female","Male"))
as.numeric(Sex)
##  [1] 2 2 1 2 1 1 2 2 2 1
levels(Sex)
## [1] "Female" "Male"
str(Sex)
##  Factor w/ 2 levels "Female","Male": 2 2 1 2 1 1 2 2 2 1
# 名義変数を集計するにはtable関数を用います。
table(Sex)
## Sex
## Female   Male 
##      4      6
# 順序変数
# 名義変数で数値と名義を直接指定する方法で順序変数を作ってみます。
Stage<-ordered(c(1,3,2,2,4,1,3,2,2,3),labels=c("I","II","IIIa","IIIb"))
Stage
##  [1] I    IIIa II   II   IIIb I    IIIa II   II   IIIa
## Levels: I < II < IIIa < IIIb
class(Stage)
## [1] "ordered" "factor"
as.numeric(Stage)
##  [1] 1 3 2 2 4 1 3 2 2 3
levels(Stage)
## [1] "I"    "II"   "IIIa" "IIIb"
str(Stage)
##  Ord.factor w/ 4 levels "I"<"II"<"IIIa"<..: 1 3 2 2 4 1 3 2 2 3
# 名義変数との違いは、水準に順序関係があることです。
# これもtable関数で集計することを勧めます。
table(Stage)
## Stage
##    I   II IIIa IIIb 
##    2    4    3    1
# 時間変数
# 時間変数は操作が難解なので簡単に触れるだけにします。
# 私もきちんとわかっていません(ほとんど使いません)。
as.POSIXct("2017/8/20",tz="GMT")
## [1] "2017-08-20 GMT"
as.POSIXct("2017/8/20 14:30",tz="GMT")
## [1] "2017-08-20 14:30:00 GMT"
as.POSIXct("2017/8/25 20:00",tz="GMT")-as.POSIXct("2017/8/20 14:30",tz="GMT")
## Time difference of 5.229167 days
# 論理変数
# TRUE と FALSEからなります。例えば、
Flag<-Sex=="Male"
Flag # 性別が男性の場合はTRUEを、女性の場合はFALSEを返します。
##  [1]  TRUE  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE
table(Flag)
## Flag
## FALSE  TRUE 
##     4     6
Flag<-Age>=65
Flag # 年齢が65歳以上の場合はTRUEを、65歳未満の場合はFALSEを返します。
##  [1] FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
table(Flag)
## Flag
## FALSE  TRUE 
##     5     5