gpt4 book ai didi

r - 在R中将字符转换为数值

转载 作者:行者123 更新时间:2023-12-04 13:28:27 24 4
gpt4 key购买 nike

我有一个读入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]]
}

我得到的结果和以前一样。

有没有一种方法可以有效地完成我想做的事情?非常感谢您的帮助。谢谢

最佳答案

迫在眉睫的问题是,数据帧的每一列只能包含一种类型的值。您的代码中6中的CA1[6,i]意味着每列中仅转换一个值,因此,在转换后插入该值时,必须将其强制转换回字符串以匹配其余列。

您可以通过一次性转换整个列来解决此问题,以便完全替换该列。即删除6:

 for (i in 8:31)
{
CA1[,i] <- as.numeric(as.character(CA1[,i]))
}

关于r - 在R中将字符转换为数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10445851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com