r - 如何将 R 中存储为字符的指数转换为数值?

标签 r

我有一个文件,其中的数字以科学记数法存储为 0.00684*10^0.0023。当我使用 read.csv() 读取文件时,它们作为字符串加载,并尝试使用 as.numeric() 函数转换它们仅返回 NA。

a = "0.00684*10^0.0023"

as.numeric(a)

不适用

有没有办法强制 R 将变量采用科学记数法?

最佳答案

这里有几种方法。他们使用问题中的 a(也在下面的注释中显示)或 c(a, a) 来说明如何将其应用于向量。没有使用任何包。

1) 使用评估/解析:

eval(parse(text = a))
## [1] 0.00687632

或者对于向量,例如c(a, a)

sapply(c(a, a), function(x) eval(parse(text = x)), USE.NAMES = FALSE)
## [1] 0.00687632 0.00687632

2)另一种方法是拆分输入并自行计算。

with(read.table(text = sub("\\*10\\^", " ", c(a, a))), V1 * 10^V2)
## [1] 0.00687632 0.00687632

3) 第三种方法是转换为复数,然后将实部和虚部结合起来得到结果。

tmp <- type.convert(sub("\\*10\\^(.*)", "+\\1i", c(a, a)), as.is = TRUE)
Re(tmp) * 10^Im(tmp)
## [1] 0.00687632 0.00687632

4)另一种拆分方法是:

as.numeric(sub("\\*.*", "", c(a, a))) * 
  10^as.numeric(sub(".*\\^", "", c(a, a)))
## [1] 0.00687632 0.00687632

6) 我们可以使用上述任何一个来定义一个自定义类,该类可以读取所需表单的字段。首先我们写出一个测试数据文件,然后定义一个自定义的 num 类。在 read.csv 中,使用 colClasses 参数指定每列具有哪个类。对于我们希望 read.csv 自动确定类的列使用 NA。

# generate test file
cat("a,b\n1,0.00684*10^0.0023\n", file = "tmpfile.csv")

setAs("character", "num",
 function(from) with(read.table(text = sub("\\*10\\^", " ", from)), V1 * 10^V2))

read.csv("tmpfile.csv", colClasses = c(NA, "num"))
##   a          b
## 1 1 0.00687632

有了这个定义,我们还可以像这样使用as:

as(c(a, a), "num")
## [1] 0.00687632 0.00687632

注意

a <- "0.00684*10^0.0023"

关于r - 如何将 R 中存储为字符的指数转换为数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71663690/

相关文章:

r - Brew 和 knit 一份 PDF 报告由带有特殊字符的变量分割 (å æ ø) - 编码问题

RCurl 和自签名证书问题

r - 如何将一个数据帧列的值指定为与 r 中另一列的值相同?

r - Julia - 相当于 R 中的递归 sapply 函数

r - 在R中串联/合并表

r - 在 R 中为 Bing 情感词典添加新词

r - 如何在 R 中设置 plotly 图表以具有透明背景?

r - 当 API 在 Docker 容器中运行时,如何使用 R Plumber 中创建的 API?

r - 如何反转 log2 变换

r - 如何按标题而不是绘图区域对齐多个绘图?