R に読み込んだファイルがあり、データフレーム (CA1 と呼ばれる) に変換されて、次のような構造になります。
Station_ID Guage_Type Lat Long Date Time_Zone Time_Frame H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23
1 4457700 HI 41.52 124.03 19480701 8 LST 0 0 0 0 0 0 0 0 0 0 0 0 MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS
2 4457700 HI 41.52 124.03 19480705 8 LST 0 1 1 1 1 1 2 2 2 4 5 5 4 7 1 1 0 0 10 13 5 1 1 3
3 4457700 HI 41.52 124.03 19480706 8 LST 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4 4457700 HI 41.52 124.03 19480727 8 LST 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
5 4457700 HI 41.52 124.03 19480801 8 LST 0 0 0 0 0 0 0 0 0 0 0 0 MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS
6 4457700 HI 41.52 124.03 19480817 8 LST 0 0 0 0 0 0 ACC ACC ACC ACC ACC ACC 6 1 0 0 0 0 0 0 0 0 0 0
H0 から H23 は character() として読み込まれます。これは、値が数値ではなく、MIS、ACC、または DEL などの値を持つ場合があるためです。
私の質問: H0 から H23 までの各列の値を数値に型キャストし、文字値 (MIS、ACC、DEL) を NA または NAN として持つ方法はありますか (is.nan またはis.na) その上でいくつかの数値モデルを実行できます。それとも、文字値を -9999 などの識別子に変更するのが最善でしょうか?
私は多くの方法を試しました。このサイトでいくつか見つけましたが、どれも機能しません。そのような:
for (i in 8:31)
{
CA1[6,i] <- as.numeric(as.character(CA1[6,i]))
}
もちろん警告が表示されますが、2 つの特定の値 is_numeric() (CA1[6,8] と CA1[6,19]) をテストすると、両方に対して false のステートメントが表示されます。最初は理由がわかりませんが、2番目は「」なので理解できます。ただし、それを is.na(CA1[6,19]) でテストして true を返すことができます。これは、数値ではないことがわかっていれば問題ありません。
私が試した2番目の方法は次のとおりです。
for (i in 8:31)
{
CA1[6,i] <- as.numeric(levels(CA1[6,i]))[CA1[6,i]]
}
以前と同じ結果が得られます。
私がやろうとしていることを効率的に行う方法はありますか?よろしくお願いいたします。ありがとうございました