Rのifelse文が行う先行評価のせいで警告メッセージが出るときの対処法
放射能の測定結果の表し方にはお約束があって、検出下限値未満だったときは、検出下限値の数値の左側に不等号(小なり記号)をつけて表現します。 つまり 8.6 と書いてあれば検出値が8.6だったということですが、 <8.6 と書いてあれば、検出下限値が8.6という環境(測定器機の精度、試料の量、計測時間 etc.)で測定したが、値が小さいせいで検出されなかった、ということになります。 これを知らない人がやらかしてしまったのが、↓こちらの誤報だったりします。 新潟県:「女性セブン」誌の放射能関連記事に誤った内容が掲載されたため、訂正と謝罪を求める抗議文を送付しました。 「出典は厚生労働省のホームページであり、不等号(<)が付されている値が検出下限値であることを理解せず転記した」 by小学館 とのこと。記者一人が勘違いしたとしても、チェック機構はなかったんでしょうかね。不等号を見て、「これ何だろう?」って思わなかったんでしょうか。 で、話を戻しまして・・・ このような表記法となっておりますので、データはこんな感じになっていたりします。 > data 食品 結果 1 A <7.8 2 B 8.9 3 C <6.7 4 D 9.0 下限値未満をどう扱うかは分析の方針次第ですが、仮に「下限値未満はゼロとして扱う」としたかったとしましょう。その場合、不等号付きの結果を加工してやる必要があります。 また、data$結果はcharacter型かfactor型(因子型)になっているので、このままでは平均を出したり、ヒストグラムを書いたりはできません。 「結果」をnumeric型に変換した「結果2」という列を追加してみましょう。 for ( i in 1:nrow(data) ) { if ( substr(data$結果[i], 1, 1) == "<" ) { # 不等号付きのときは、ゼロにする data$結果2[i] ...