我有一个包含一堆列的数据框,我需要将它们转换为数字类型。我编写了以下代码来尝试执行此操作,但是它说替换有 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 )
正如 SenorO 指出的那样,您的原始代码不起作用的原因是它$i
不会评估i
以找出它的当前值。您应该改为使用双括号访问并分配给列,这在i
名称或索引号时起作用:
for (i in instanceconvert)
{
regmodel[[i]] <- as.numeric(regmodel[[i]])
}
按照 Ari 的方法,您可以摆脱循环:
regmodel[,instanceconvert] <-
lapply(regmodel[,instanceconvert,drop=FALSE],as.numeric)
您也可以使用您的范围 7:262 代替“instanceconvert”来执行此操作,因为您可以按名称或列号访问/分配。
结合@Andrii 的回答和@RobertYi 的评论,我的简短建议是
df[] <- sapply(df, as.numeric)
这可确保结果保留为数据框。
只需将您想要的列作为数据框传递d
到以下内容中:
data.frame(apply(d, 2, as.numeric))
这将逐列并将每个转换为数字。然后相应地更改您的行名和列名。
一种快速而肮脏的方法,特别是如果您有需要转换的变量,这意味着很多转换代码是将文件写出并使用 write.csv/read.csv 之类的东西再次读回
write.csv(regmodel, file="regmodel.csv")
read.csv(file="regmodel.csv")
除了所有这些方法之外,如果您有字符/数字/日期类型的列并希望根据它们的值转换(类型)它们,以下可能有用:
type.convert(df, as.is = TRUE)