如何在不更改值的情况下将因子格式转换为R中的数字格式?

时间:2013-05-02 10:17:08

标签: r numeric r-factor

下面是数据帧df1,我希望将因子格式的“V2”列转换为数字,而不更改当前值(0; 0; 8,5; 3)。

DF1 =

             V1  V2 V3       X2 X3
4470 2010-03-28   0  A 21.53675  0
4471 2010-03-29   0  A 19.21611  0
4472 2010-03-30 8,5  A 21.54541  0
4473 2010-03-31   3  A       NA NA

由于列“V2”是因子格式,我首先将其转换为字符格式: df1[,2]=as.character(df1[,2])

然后我尝试将“V2”转换为数字格式:

df1[,2]=as.numeric(df1[,2])

导致此R消息:

Warning message: NAs introduced by coercion

以下数据框df[3,2]已更改为“NA”而不是“8,5”。

             V1 V2 V3       X2 X3
4470 2010-03-28  0  A 21.53675  0
4471 2010-03-29  0  A 19.21611  0
4472 2010-03-30 NA  A 21.54541  0
4473 2010-03-31  3  A       NA NA 

这可能与8,5不是整数的事实有关。我还是不知道如何解决这个问题。非常感谢帮助!

3 个答案:

答案 0 :(得分:9)

尝试使用此替换数据中的逗号:

fac<- c( "0" , "0" , "1,5" , "0" , "0" , "8" )
#[1] "0"   "0"   "1,5" "0"   "0"   "8" 
fac <- as.numeric( sub(",", ".", fac) )
#[1] 0.0 0.0 1.5 0.0 0.0 8.0

更一般地将因子转换为其基础值而不是因子表示:

fac <- as.factor( fac )
as.numeric(fac)
#[1] 1 1 2 1 1 3
as.numeric(as.character(fac))
#[1] 0.0 0.0 1.5 0.0 0.0 8.0

然而,这是转换为原始值的规范方式

 as.numeric(levels(fac))[fac]

在帮助页面?as.factor

  

特别是,as.numeric应用于一个因子是没有意义的,并且可能通过隐式强制发生。要将因子f转换为大约其原始数值,建议使用.numeric(levels(f))[f],并且比as.numeric(as.character(f))稍微更有效。

答案 1 :(得分:7)

用点代替逗号,代表R中的小数。否则R认为它是一个字符并将值强制转换为NA。

然后,提取值:

as.numeric(levels(df1[,2])[df[,2]])

(感谢@ SimonO101的更正)

答案 2 :(得分:0)

转换为字符后添加以下代码行:

df[3,2] <- 8.5

然后,您应该能够将字符转换为数字。由于R的默认小数点分隔符为.而非,,因此如果没有该步骤,则您的值将替换为NA。