【问题标题】:Reading scientific notation D+阅读科学记数法 D+
【发布时间】:2015-03-20 11:59:36
【问题描述】:

如何将科学记数法 (D+) 格式的数据读入 R?

例如

-0.416932D+01, -0.412300D+02

【问题讨论】:

  • 不知道是否有直接的方法来处理这个符号,但你可以将这些值读取为character 对象(比如x 是名称),然后将其转换为@ 987654324@ 至 as.numeric(gsub("D","e",x))
  • @nicola,作为答案发帖?
  • scan(textConnection(chartr("D", "e", "-0.416932D+01, -0.412300D+02")), sep = ",")
  • read.fortran 看起来应该能够处理这些数字,但其中似乎存在一些错误和限制。我在这里提交了一个错误报告:bugs.r-project.org/bugzilla/show_bug.cgi?id=16275

标签: r scientific-notation


【解决方案1】:

使用stringr包的解决方案:

library(stringr)  
x <- c("-0.416932D+03")
as.numeric(str_replace(x, "D", "e"))
[1] -416.932

如果您不想使用外部包,可以使用基础包中的gsub 函数:

as.numeric(gsub("D","e",x))

【讨论】:

  • 如果你还没有在你的代码中使用stringr,那么@nicola 在 cmets 中的建议使用gsub()(来自base R)可能更简单?
  • 我更喜欢 Hadley W. 代码中的函数。
  • @MihaTrošt 没关系。 Ben 只是说有些人不喜欢为这样的事情添加外部依赖项,因此如前所述,gsub 在这种情况下是一个合适的函数。
  • 我是否也应该包含gsub 解决方案?我想知道为什么人们不在答案中而是在 cmets 中发布解决方案。
【解决方案2】:

如果您在 Unix/Linux 系统上工作,最简单的方法是使用以下 sed 表达式预解析您的数据:

sed '/^#/b;s/\([-+]\?[0-9]\?[.][0-9]\+\)[DEde]\([-+]\?[0-9]\+\)/\1E\2/g' file

这只会将带有 D 或 E 表示法的数字字符串转换为简单的 E 表示法。任何 D 到 E 的简单转换都可能会破坏一些字符串。

【讨论】:

    猜你喜欢
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 2010-12-29
    • 2016-04-23
    • 2016-03-04
    • 2017-04-05
    相关资源
    最近更新 更多