我正在尝试用[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
有关可能发生的事情的任何想法吗?
答案 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.2
和1.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