阅读科学记数法 D+

Posted

技术标签:

【中文标题】阅读科学记数法 D+【英文标题】:Reading scientific notation 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 【参考方案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 的简单转换都可能会破坏一些字符串。

【讨论】:

以上是关于阅读科学记数法 D+的主要内容,如果未能解决你的问题,请参考以下文章

Python:读取数字格式时遇到问题

java字符串转数字如何不显示科学计数法

在 Kindle paperwhite 上阅读科学论文 (pdf)

阅读《减压脑科学》

使用 0 值指数或尾随 0 使科学计数法无效

PHPExcel:长数字在阅读时具有科学格式(xxxE-08)