将列批量转换为数字类型

时间:2013-10-02 20:34:27

标签: r

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

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

for (i in instanceconvert)
{
  regmodel$i <- as.numeric(regmodel$i)
}

任何帮助都将不胜感激。

7 个答案:

答案 0 :(得分:31)

您可以使用sapply:

dat <- sapply( dat, as.numeric )

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

library( taRifx )
dat <- japply( dat, which(sapply(dat, class)=="character"), as.numeric )

答案 1 :(得分:5)

正如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”执行此操作,因为您可以按名称或列号进行访问/分配。

答案 2 :(得分:4)

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

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

参考:Change all columns from factor to numeric in R

答案 3 :(得分:2)

快速肮脏的方式,特别是如果你有需要转换的变量,这意味着很多转换代码是将文件写出并再次使用write.csv /读取它read.csv

write.csv(regmodel, file="regmodel.csv")
read.csv(file="regmodel.csv")

答案 4 :(得分:1)

只需将您想要的列作为数据框d传递到以下内容中:

data.frame(apply(d, 2, as.numeric))

这逐列,并将每个转换为数字。然后只需相应地更改行名和列名。

答案 5 :(得分:0)

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

df[] <- sapply(df, as.numeric)

这可以确保结果保持为数据框。

答案 6 :(得分:0)

除了所有这些方法外,如果您有字符/数字/日期类型的列并希望根据它们的值转换(类型)它们,以下可能有用:

<ComponentB
   add={val => setCounterB(counterB+val)}
   subtract={val => setCounterB(counterB+val)}/>   // using '+' coz val = -1