将列批量转换为数字类型

Sco*_*hen 17 r

我有一个数据框,其中包含一堆我需要转换为数字类型的列.我已经编写了以下代码来尝试这样做,但是它说替换有0行.

instanceconvert <- colnames(regmodel[7:262])

for (i in instanceconvert)
{
  regmodel$i <- as.numeric(regmodel$i)
}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

Ari*_*man 36

您可以使用sapply:

dat <- sapply( dat, as.numeric )
Run Code Online (Sandbox Code Playgroud)

如果不是每列都需要转换:

library( taRifx )
dat <- japply( dat, which(sapply(dat, class)=="character"), as.numeric )
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,`dat`类现在是`matrix`.`dat < - as.data.frame(sapply(dat,as.numeric)`允许更容易的替换. (7认同)

ber*_*ers 10

结合@Andrii 的答案和@RobertYi 的评论,我的简短建议是

df[] <- sapply(df, as.numeric)
Run Code Online (Sandbox Code Playgroud)

这确保结果保持为数据框并保留列名称(谢谢,@krassowski)。

  • 它还保留行名称(而得票最多的答案则不保留)。 (4认同)

Fra*_*ank 5

正如SenorO指出的那样,原始代码不起作用的原因是$i不会评估i它以找出它的当前值.您应该使用双括号访问并分配给列,这在i名称或索引号时起作用:

for (i in instanceconvert)
{
  regmodel[[i]] <- as.numeric(regmodel[[i]])
}
Run Code Online (Sandbox Code Playgroud)

按照Ari的方法,你可以摆脱循环:

regmodel[,instanceconvert] <- 
    lapply(regmodel[,instanceconvert,drop=FALSE],as.numeric)
Run Code Online (Sandbox Code Playgroud)

您也可以使用范围7:262代替"instanceconvert"执行此操作,因为您可以按名称或列号访问/分配.


And*_*rii 5

这是其他问题的快速解决方案:

df[] <- lapply(df, function(x) as.numeric(as.character(x)))

参考:将R中的所有列从系数更改为数值

  • @bers:因子有时会转换为奇怪的数字。 (2认同)