jun <- which(! is.na(dat$score1))score1,score2を,各々,NAの判定をして,scoreに代入しています。
dat$score[jun] <- dat$score1[jun]
jun <- which(! is.na(dat$score2))
dat$score[jun] <- dat$score2[jun]
No.22572 Re: R 複数のNA判定に基づく代入 【青木繁伸】 2018/06/16(Sat) 21:35
いろいろやり方はあるでしょうが,もっとも真っ正直に書くならば> dat = data.frame(トリッキーな書き方ならば,出現する可能性のある数値よりも小さい値を dummy にわりあてて,以下のようにすることも可能
+ score=NA,
+ score1=c(NA, NA, 2.174, 6.042, NA, 2.656, NA, NA, NA, NA, 3.153, 4.344),
+ score2=c(1.481, 4.113, NA, NA, 2.674, NA, 2.500, 2.276, 4.162, NA, NA, NA))
> dat$score = ifelse(is.na(dat$score1) & !is.na(dat$score2), dat$score2, ifelse(!is.na(dat$score1) & is.na(dat$score2), dat$score1, NA))
> dat
score score1 score2
1 1.481 NA 1.481
2 4.113 NA 4.113
3 2.174 2.174 NA
4 6.042 6.042 NA
5 2.674 NA 2.674
6 2.656 2.656 NA
7 2.500 NA 2.500
8 2.276 NA 2.276
9 4.162 NA 4.162
10 NA NA NA
11 3.153 3.153 NA
12 4.344 4.344 NA> dummy = -99999 # 出現する可能性のある数値が正ならばこのような値を仮定するどちらが効率がよいか?
> dat[is.na(dat)] = dummy
> dat$score = ifelse(dat$score1 > dat$score2, dat$score1, dat$score2)
> dat[dat == dummy] = NA
> dat
score score1 score2
1 1.481 NA 1.481
2 4.113 NA 4.113
3 2.174 2.174 NA
4 6.042 6.042 NA
5 2.674 NA 2.674
6 2.656 2.656 NA
7 2.500 NA 2.500
8 2.276 NA 2.276
9 4.162 NA 4.162
10 NA NA NA
11 3.153 3.153 NA
12 4.344 4.344 NA
No.22573 Re: R 複数のNA判定に基づく代入 【明石】 2018/06/16(Sat) 21:54
青木先生 様;
お忙しいところを失礼いたします,明石と申します。
今回も,ご丁寧なご教示をいただき,大変に良い勉強をさせていただきました。
2つの方法とも理解できましたが,ifelse()関数を使わせていただきます。
今回も助けていただき,誠にありがとうございました。
● 「統計学関連なんでもあり」の過去ログ--- 048 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る