如何因素格式转换为数字格式中的R不改变值? [重复](How to convert factor

2019-09-01 17:53发布

这个问题已经在这里有一个答案:

  • 我该如何转换包含十进制数数值的因素列? 4个回答

下面是数据帧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是不是整数的事情。 不过我不知道如何解决这个问题。 帮助将不胜感激!

Answer 1:

用点,这代表小数在R.否则[R认为这是一个字符,强制转换价值NA替换逗号。

然后,提取值:

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

(感谢@ SimonO101的校正)



Answer 2:

试试这个来代替逗号在您的数据:

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到大约其原始数值,as.numeric(水平(f))的苯并[f]建议和略高于as.numeric更为有效(as.character(F))。



Answer 3:

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

df[3,2] <- 8.5

然后,您应该能够字符转换为NUMERICS。 由于R的默认小数点分隔符是. 而不是,您的值由NA更换,无需该步骤。



文章来源: How to convert factor format to numeric format in R without changing the values? [duplicate]