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

如何在不更改值的情况下将R中的因子格式转换为数字格式?,r,numeric,r-factor,R,Numeric,R Factor,下面是数据帧df1,我想在不更改当前值(0;0;8,5;3)的情况下将列“V2”从因子格式转换为数字格式 df1= 由于列“V2”为因子格式,我首先将其转换为字符格式: df1[,2]=as.字符(df1[,2]) 然后我尝试将“V2”转换为数字格式: df1[,2]=as.numeric(df1[,2]) 导致此消息的原因是: 警告消息:强制引入NAs 下面的数据帧,其中df[3,2]已更改为“NA”,而不是剩余的“8,5” 这可能与8,5不是整数这一事实有关。我仍然不知道如何解决这个问题。非

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

df1=

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

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

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

导致此消息的原因是:

警告消息:强制引入NAs

下面的数据帧,其中
df[3,2]
已更改为“NA”,而不是剩余的“8,5”


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

尝试用以下方法替换数据中的逗号:

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
从帮助页面
?as.factor

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


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

然后,要提取值:

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

(感谢@SimonO101的更正)

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

df[3,2] <- 8.5

df[3,2]这里的问题是小数点之间的分隔是用逗号而不是点分隔的。@SimonO101谢谢,我最初在
fac
向量上测试了它,因此遗漏了它。Thx for your response。如何将逗号改为R中的点?这个数据帧实际上是更大数据帧的一部分。手工做不了。MB123:@SimonO101已经贴出来了。啊,我明白了。谢谢你的帮助!!如果OP的数据框中有多个带逗号的数据点,Hi@SimonO101将
gsub
作为替代公式吗?@TahnoonPasha在
fac上试用
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.numeric(levels(df1[,2])[df[,2]])
df[3,2] <- 8.5