阅读科学记数法 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+的主要内容,如果未能解决你的问题,请参考以下文章