MB1*_*123 4 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
Run Code Online (Sandbox Code Playgroud)
由于列"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
Run Code Online (Sandbox Code Playgroud)
这可能与8,5不是整数的事实有关.我还是不知道如何解决这个问题.非常感谢帮助!
Sim*_*lon 10
试试这个来替换数据中的逗号:
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
Run Code Online (Sandbox Code Playgroud)
更一般地,将因子转换为其基础值而不是因子表示:
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
Run Code Online (Sandbox Code Playgroud)
但是,这是转换为原始值的规范方式
as.numeric(levels(fac))[fac]
Run Code Online (Sandbox Code Playgroud)
从帮助页面 ?as.factor
特别是,as.numeric应用于一个因子是没有意义的,并且可能通过隐式强制发生.要将因子f转换为大约其原始数值,建议使用.numeric(levels(f))[f],并且比as.numeric(as.character(f))稍微更有效.
用点代替逗号,代表R中的小数.否则R认为它是一个字符并将值强制转换为NA.
然后,提取值:
as.numeric(levels(df1[,2])[df[,2]])
Run Code Online (Sandbox Code Playgroud)
(感谢@ SimonO101的更正)