我有一个文件,我读入 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]))
}
这当然会发出警告,但是当我测试两个特定值 is_numeric() (CA1[6,8] 和 CA1[6,19]) 时,我得到了一个错误的陈述。第一个我不明白为什么,但第二个我明白,因为它是一个“”。但是,我可以用 is.na(CA1[6,19]) 测试它并返回 true,这对我来说很好知道它不是数字。
我尝试的第二种方法是:
for (i in 8:31)
{
CA1[6,i] <- as.numeric(levels(CA1[6,i]))[CA1[6,i]]
}
我得到与以前相同的结果。
有没有办法以有效的方式做我想做的事情?非常感谢您的帮助。谢谢