R logo

NAの取り扱いシリーズ第3段。

 

今回は、他のデータから予測できる場合にその情報を使って補完する方法。

他のデータを使って補完

例えば下記のようなデータフレームがあった場合、

r-handling-na-factual-1

"State" が<NA>になっているけど、隣の "City" がわかっていれば100%推測可能。

New Yorkはニューヨーク州(NY)だし、San Franciscoはカリフォルニア州(CA)。

とゆーことで、それぞれ "City" から予測して、"State" のデータを補ってみる。

 

まずは、

Dat[is.na(Dat$State) & Dat$City=="New York",]

とすると、"State" が <NA> で "City" が "New York" の行が抽出される。

r-handling-na-factual-2

で、この行の "State" に "NY" と入れたいので、

Dat[is.na(Dat$State) & Dat$City=="New York", "State"] <- "NY"

とすればOK。

r-handling-na-factual-3

その他の実例

ほぼほぼ個人の備忘録。

① Thal, Braak, CERADからABC criteriaでADNCの情報を追加する

私の手元にあるデータはThal Phase, Braak 6 stage, Braak 3 stage, CERAD scoreのデータがあるけど、ADNCがない。

これを、

  1. Braak 3 stage の空欄部分を、Braak 6 stage のデータから推測して補完する
    • Braak6:1と2 → Braak3:1
    • Braak6:3と4 → Braak3:2
    • Braak6:5と6 → Braak3:3
  2. Thal, Braak3, CERADをABC criteriaに当てはめる

という2段階でADNCのデータを作っていきたい場合。

Braak6のデータから予測してBraak3のデータを補完

Braak3は、Braak6を半分して、少数は繰り上げれば良いので、下記のような感じ。

w <-which(is.na(Dat$Braak03) & !is.na(Dat$Braak06))      # Braak03がNAでBraak06にデータがある行を抽出
Dat$Braak03[w] <- Dat$Braak06[w]/2                       # Braak6の値を1/2にする
Dat$Braak03[Dat$Braak03==0.5] <- 1                       # 0.5は1に繰り上げる
Dat$Braak03[Dat$Braak03==1.5] <- 2                       # 1.5は2に繰り上げる
Dat$Braak03[Dat$Braak03==2.5] <- 3                       # 2.5は3に繰り上げる

Thal Phase, Braak3, CERADのデータをABC criteriaに当てはめてADNCのデータを作製

ABC criteriaは下記のような感じ。

ABC criteria

上表を元に、

  1. ADNCの列を作成
  2. ADNCの列に、ABC criteriaを元にしたADNCのデータを追加

の順で作っていく。

mutate(Dat,ADNC=Braak03)                                                       # ADNCという列を作る
Dat$ADNC[Dat$ABeta ==0 & Dat$CERAD ==0] <- 'Not'                               # 'Not' の条件を入れる
Dat$ADNC[Dat$ABeta> 0 & Dat$Braak03<=1] <- 'Low'                               # 'Low' の条件を入れる
Dat$ADNC[Dat$ABeta==1 & Dat$CERAD<=1] <- 'Low'                                 # 'Low' の条件を入れる
Dat$ADNC[Dat$ABeta==1 & Dat$CERAD>=2 & Dat$Braak03<=1] <- 'Low'                # 'Low' の条件を入れる
Dat$ADNC[Dat$ABeta==1 & Dat$CERAD>=2 & Dat$Braak03 >=2] <- 'Intermediate'      # 'Intermediate' の条件を入れる
Dat$ADNC[Dat$ABeta==2 & Dat$Braak03>=2] <- 'Intermediate'                      # 'Intermediate' の条件を入れる
Dat$ADNC[Dat$ABeta==3 & Dat$CERAD<=1 & Dat$Braak03>=2] <- 'Intermediate'       # 'Intermediate' の条件を入れる
Dat$ADNC[Dat$ABeta==3 & Dat$CERAD>=2 & Dat$Braak03 ==2] <- 'Intermediate'      # 'Intermediate' の条件を入れる
Dat$ADNC[Dat$ABeta==3 & Dat$CERAD>=2 & Dat$Braak03 ==3] <- 'High'              # 'High' の条件を入れる

② 他のデータフレームから情報を持ってくる場合

例えば、Dat_NFTcountのデータフレームには Areaの列の情報がなくて(NA)

NFTcountのデータ
NFTcountのデータ

Dat_NFTのデータフレームにあるAreaの情報を当てはめたい場合。

NFTのデータ
NFTのデータ

 

左の列の "ImageID" が共通項なので、

「Dat_NFTcount の "ImageID" が Dat_NFT の "ImageID" と同じ行の "Area" の列の値を当てはめる」という形にする。

1.列のベクターとして指定する場合は下記。

# Dat_NFTcount$Area という列ベースで指定する場合
Dat_NFTcount$Area[Dat_NFTcount$ImageID==Dat_NFT$ImageID] <- Dat_NFT$Area

2.行列で指定する場合は下記。

# Dat_NFTcountのデータベースで指定する場合
Dat_NFTcount[Dat_NFTcount$ImageID==Dat_NFT$ImageID, "Area"] <- Dat_NFT[,"Area"]

 

 

References

Udemy-English

にほんブログ村 子育てブログ ワーキングマザー育児へ