【问题标题】:Batch convert columns to numeric type将列批量转换为数字类型
【发布时间】:2013-10-09 09:26:53
【问题描述】:

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

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 这不起作用的原因是你告诉 R 在 regmodel 内寻找一个名为 i 的对象。在您的循环中,i 是列本身,而不是列的名称。
  • 别忘了 R Inferno 中的 8.2.1:www.burns-stat.com/pages/Tutor/R_inferno.pdf

标签: r


【解决方案1】:

您可以为此使用 sapply:

dat <- sapply( dat, as.numeric )

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

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

【讨论】:

  • 请注意dat 的类现在是matrixdat &lt;- as.data.frame(sapply(dat, as.numeric) 更容易更换。
【解决方案2】:

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

df[] &lt;- lapply(df, function(x) as.numeric(as.character(x)))

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

        一种快速而肮脏的方法,特别是如果您有需要转换的变量,这意味着很多转换代码是写出文件并使用类似 write.csv/ 的东西再次读回它读取.csv

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

        【讨论】:

          【解决方案6】:

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

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

          这将逐列并将每列转换为数字。然后相应地更改您的行名和列名。

          【讨论】:

            【解决方案7】:

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

            type.convert(df, as.is = TRUE)
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-06-25
              • 1970-01-01
              • 1970-01-01
              • 2011-01-18
              • 2021-10-25
              • 1970-01-01
              • 2011-10-08
              相关资源
              最近更新 更多