我有一列数据框,需要转换为数字类型。我已经写了下面的代码来试图做到这一点,但它是说替换有0行。将列转换为数字类型
instanceconvert <- colnames(regmodel[7:262])
for (i in instanceconvert)
{
regmodel$i <- as.numeric(regmodel$i)
}
任何帮助,将不胜感激。
我有一列数据框,需要转换为数字类型。我已经写了下面的代码来试图做到这一点,但它是说替换有0行。将列转换为数字类型
instanceconvert <- colnames(regmodel[7:262])
for (i in instanceconvert)
{
regmodel$i <- as.numeric(regmodel$i)
}
任何帮助,将不胜感激。
可以为此sapply使用:
dat <- sapply(dat, as.numeric)
如果不是每列需要转换:
library(taRifx)
dat <- japply(dat, which(sapply(dat, class)=="character"), as.numeric)
看到它可能是有用的注意'dat'的类现在是'matrix'。 'dat < - as.data.frame(sapply(dat,as.numeric)'允许更换更容易。 –
由于SenorO指出,您的原始代码不起作用的原因是$i
不会评估i
找出它的当前值。而是应该访问和使用的双支架,其工作时i
是一个名称或索引号分配给列:
for (i in instanceconvert)
{
regmodel[[i]] <- as.numeric(regmodel[[i]])
}
继阿里的做法,你可以摆脱循环:
regmodel[,instanceconvert] <-
lapply(regmodel[,instanceconvert,drop=FALSE],as.numeric)
你也可以用范围7:262来代替“instanceconvert”,因为你可以通过名称或列号访问/分配。
一个快速肮脏的方式做到这一点,特别是如果你有变量遍布需要转换的,这意味着大量的转换代码写入文件并再次使用类似write.csv读回/read.csv
write.csv(regmodel, file="regmodel.csv")
read.csv(file="regmodel.csv")
这里是另一个问题快速解决方案:
df[] <- lapply(df, function(x) as.numeric(as.character(x)))
只是通过你想要的列作为一个数据帧d
到以下几点:
data.frame(apply(d, 2, as.numeric))
此柱去列和每转换成数字。然后相应地改变你的行名和列名。
这是不工作的原因是你在告诉R键查找一个''i'的regmodel'内的对象。在循环内部,'i'是列本身,而不是列的名称。 –
而在R地狱不要忘了8.2.1:www.burns-stat.com/pages/Tutor/R_inferno.pdf – Henrik
也http://stackoverflow.com/a/12727871/636656 –