我有一个数据框,其中包含一堆我需要转换为数字类型的列.我已经编写了以下代码来尝试这样做,但是它说替换有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)
ber*_*ers 10
结合@Andrii 的答案和@RobertYi 的评论,我的简短建议是
df[] <- sapply(df, as.numeric)
Run Code Online (Sandbox Code Playgroud)
这确保结果保持为数据框并保留列名称(谢谢,@krassowski)。
正如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"执行此操作,因为您可以按名称或列号访问/分配.
这是其他问题的快速解决方案:
df[] <- lapply(df, function(x) as.numeric(as.character(x)))