as.numeric用于舍入正值/输出NAN用于负值

时间:2013-11-18 20:10:16

标签: r numeric

我正在尝试用[R]做一些非常简单的事情:将data.frame中的值转换为数字,因为我需要测试它们的值而r不会将它们识别为数字。

当我将十进制数转换为数字时,我得到正确的值:

> a <- as.numeric(1.2)
> a
[1] 1.2

但是,当我从data.frame中提取正值然后使用as.numeric时,数字会被舍入:

> class(slices2drop)
[1] "data.frame"
> slices2drop[2,1]
[1] 1.2
Levels: 1 1.2
> a <- as.numeric(slices2drop[2,1])
> a
[1] 2

以防万一:

> a*100
[1] 200

所以这不是显示问题,数据本身没有得到妥善处理。

此外,当数字为负时,我得到NA:

> slices2drop[2,1] <- -1
> a <- as.numeric(slices2drop[2,1])
> a
[1] NA

有关可能发生的事情的任何想法吗?

2 个答案:

答案 0 :(得分:9)

此问题与factors有关。要解决您的问题,首先将您的因子变量强制为字符,然后应用as.numeric来获得您想要的内容。

> x <- factor(c(1, 1.2, 1.3)) # a factor variable
> as.numeric(x)  
[1] 1 2 3

返回整数,每个级别一个,有3个级别:1, 1.21.3,因此会返回1,2,3

> as.numeric(as.character(x)) # this is what you're looking for
[1] 1.0 1.2 1.3

实际上as.numeric没有舍入你的数字,它会在你的因子变量中为每个级别返回一个唯一的整数。

答案 1 :(得分:0)

我也遇到过类似的情况,将因子转换为数字会产生错误的结果。

键入时:?factor

因子变量中提到的 警告 很好地解释了这种复杂性,并提供了解决此问题的方法。 这是一个开始工作的好地方...

要考虑的另一件事是,这种转换会将 NULL s转换成 NA s