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

# 特殊な値(欠測、無限)
# 統計解析を行う際には欠測の操作に慣れておく必要があります。
# Rでは「値が無い」ことを示す特殊な値として、NA, NULL, NaNの3つが定義されています。
# NAは値が本来あるはずの場所に無いことを示します(欠測)
# NULLは「なんにも無い」ことを示します。完全な無です。
# 例えば、
a<-c(1,2,3,4)
b<-c(1,2,NA,4)
c<-c(1,2,NULL,4)
a # 全て値あり
## [1] 1 2 3 4
b # 3番目の値が欠けている(NA)
## [1]  1  2 NA  4
c # 3番目の値がそもそも存在しない
## [1] 1 2 4
length(a) # 長さ4
## [1] 4
length(b) # 長さ4
## [1] 4
length(c) # 長さ3
## [1] 3
# NULLは何もなかったこと、枠組みすら存在しないことを表すので、下記の代入式を使うと、
# 変数の値だけでなく、その値が入っていた場所も消滅します(長さがゼロになります)。
a<-NULL
# データフレームの中の変数を削除する時に使うことがあります。
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")),
    ethnicity=factor(c(rep("Japanese",4),"Chinese","Japanese","Korean",rep("Japanese",3)))
  )
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
dataset.lesson5$ethnicity<-NULL
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
# 変数を完全に消すときは、rm関数を使います。
rm(a,b,c)

# データセットの中に欠測が含まれることを表現するのはNAです。
# 次にNAの扱いかたを見ていきます。まずは数値データから。
a<-c(0,1,2,NA,5)

# ベクターの中にNAが含まれていると、平均値や中央値もNAになります。
mean(a)
## [1] NA
median(a)
## [1] NA
# 一般的にはNAを除外して、平均値や中央値を求めます。
mean(a,na.rm=T)
## [1] 2
median(a,na.rm=T)
## [1] 1.5
quantile(a,na.rm=T)
##   0%  25%  50%  75% 100% 
## 0.00 0.75 1.50 2.75 5.00
# summary関数では自動的にNAを除外した統計量を求めます。
summary(a)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##    0.00    0.75    1.50    2.00    2.75    5.00       1
# カウントデータにおけるNA
# 注意:NAは、"NA"ではなくNAです。
a<-factor(c("Yes","No","No",NA,"Yes"))
a
## [1] Yes  No   No   <NA> Yes 
## Levels: No Yes
table(a)
## a
##  No Yes 
##   2   2
summary(a)
##   No  Yes NA's 
##    2    2    1
# NaNは 0 / 0 の結果です。Excelではエラーを返しますが、Rでは演算結果をNaNとして保存します。
0/0
## [1] NaN
a<-0/0
a
## [1] NaN
mean(a)
## [1] NaN
a<-c(1,1,1,NaN)
mean(a)
## [1] NaN
mean(a,na.rm=T)
## [1] 1
# 他に特殊な値として無限(Inf)があります。
Inf
## [1] Inf
1*Inf
## [1] Inf
2*Inf
## [1] Inf
-1*Inf
## [1] -Inf
1/Inf
## [1] 0
Inf+1
## [1] Inf
Inf-1
## [1] Inf
a<-c(1,2,3,Inf)
mean(a)
## [1] Inf
median(a)
## [1] 2.5
# ただし、Infの計算によってはエラーが生じます。
# たとえば、mean(1:Inf) 1からInfまでの整数の平均を求めますが、カッコ内は無限長のベクターなので
# 有限メモリのPCでは扱えません。

# こちらも非常に参考になります。
# https://qiita.com/fujit33/items/5950889b983f93250998