# ←この記号の後は次の改行までコメントになります。
# 特殊な値(欠測、無限)
# 統計解析を行う際には欠測の操作に慣れておく必要があります。
# 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