as.numeric是舍入正值/输出NA为负值

use*_*996 -1 r numeric

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

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

> a <- as.numeric(1.2)
> a
[1] 1.2
Run Code Online (Sandbox Code Playgroud)

但是,当我从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
Run Code Online (Sandbox Code Playgroud)

以防万一:

> a*100
[1] 200
Run Code Online (Sandbox Code Playgroud)

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

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

> slices2drop[2,1] <- -1
> a <- as.numeric(slices2drop[2,1])
> a
[1] NA
Run Code Online (Sandbox Code Playgroud)

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

Jil*_*ina 10

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

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

整数数目被返回,每每个级别之一,有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
Run Code Online (Sandbox Code Playgroud)

实际上as.numeric不是对数字进行舍入,它会在因子变量中为每个级别返回一个唯一的整数.