【问题标题】:Convert data from character to numeric将数据从字符转换为数字
【发布时间】:2014-10-23 00:07:12
【问题描述】:

我需要将数据框中的每个值从字符转换为数字。 我写道:

y[,2:ncol(y)]<-sapply(y[,2:ncol(y)], as.numeric)

但是由于表很大(20000 列乘 3000 行)需要很多时间。 有没有办法更有效地做到这一点?谢谢

【问题讨论】:

  • 这可能会有所帮助:stackoverflow.com/questions/26299159/…
  • 你能避免将所有值变成因子的步骤吗? dat[] &lt;- lapply(dat, function(x) as.numeric(as.character(x))) 对我来说只需要几秒钟,没有额外的开销。但是,如果您作为数据框读入或将矩阵强制转换为数据框,您可能可以避免此步骤
  • 您可以通过使用if 语句避免对不必要的列进行此操作来加快速度。 dat[] &lt;- lapply(dat, function(x) if(is.factor(x)) as.numeric(as.character(x)) else x)。或者更好的办法是在lapply 调用中只包含因子列dat[sapply(dat, is.factor)]
  • 在这里查看我的答案stackoverflow.com/questions/26391921/…
  • 所以你有 20,000 列,只有第一列不是数字?听起来您应该首先使用数字矩阵(请参阅data.matrix)并将第一列保留在单独的向量中,如果有意义的话,可以将其用作矩阵的行名。

标签: r performance loops sapply


【解决方案1】:

使用 dplyr

如果 all 已经被定义为字符:

y2 <- mutate_all(y, funs(as.numeric))

否则先转换成字符

y2 <- mutate_all(y, function(x) as.numeric(as.character(x)))

(您可以通过使用相同的名称“y”而不是“y2”来覆盖数据框)

【讨论】:

    猜你喜欢
    • 2014-05-11
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    相关资源
    最近更新 更多