将值从 0.001 等转换为科学记数法 1e-3 时遇到问题

Posted

技术标签:

【中文标题】将值从 0.001 等转换为科学记数法 1e-3 时遇到问题【英文标题】:trouble with converting values to scientific notation 1e-3 from 0.001 etc 【发布时间】:2016-09-13 01:51:04 【问题描述】:

我知道这可能是个愚蠢的问题,但我认为事情应该更清楚。我的意思是将数字从普通格式转换为科学格式,例如从通常的 0.001 格式转换为 1e-3 格式。

我知道有一些类似的问题,但关键是我想在不更改全局 options(scipen) 的情况下执行此过程。在我的情况下,总是先将options(scipen) 更改为我不希望更改它们的其他值并不是很好的用途。

这就是我的意思,假设我们有这样的数据

set.seed(12345)
set =rep(rep(c("1","2"),each=5),times=1)
V=rep(seq(1,1.4,0.1),times=2)
value <- replicate(1,c(replicate(2,sort(10^runif(5,-3,0),decreasing=FALSE))))
data_rep <- data.frame(V, value,set)

#> data_rep
#     V       value set
#1  1.0 0.002351715   1
#2  1.1 0.005382811   1
#3  1.2 0.023703932   1
#4  1.3 0.058314556   1
#5  1.4 0.476184589   1
#6  1.0 0.001595635   2
#7  1.1 0.001896175   2
#8  1.2 0.034667861   2
#9  1.3 0.097931107   2
#10 1.4 0.197982134   2

试用 1

当我们做options(scipen=-10)

#> data_rep
#         V        value set
#1  1.0e+00 2.341224e-02   1
#2  1.1e+00 1.454493e-01   1
#3  1.2e+00 1.918435e-01   1
#4  1.3e+00 4.239548e-01   1
#5  1.4e+00 4.553797e-01   1
#6  1.0e+00 3.155843e-03   2
#7  1.1e+00 9.446831e-03   2
#8  1.2e+00 3.370335e-02   2
#9  1.3e+00 1.524459e-01   2
#10 1.4e+00 9.315600e-01   2

我们可以看到这次 V 列也发生了变化,这在绘图时不好

qplot(data=data_rep,x=V,y=value)

试用 2

使用format函数改变格式

  options(scipen = 0)
    library(dplyr)
    df_format <- data_rep%>%
  mutate(value=as.numeric(format(value,scientific=TRUE,digits=4))) %>%
  mutate(logic=ifelse(value<2e-1,TRUE,FALSE))

#       > df_format
#     V    value set logic
#1  1.0 0.023410   1  TRUE
#2  1.1 0.145400   1  TRUE
#3  1.2 0.191800   1  TRUE
#4  1.3 0.424000   1 FALSE
#5  1.4 0.455400   1 FALSE
#6  1.0 0.003156   2  TRUE
#7  1.1 0.009447   2  TRUE
#8  1.2 0.033700   2  TRUE
#9  1.3 0.152400   2  TRUE
#10 1.4 0.931600   2 FALSE

我们可以看到,值列更改为原始格式。我们如何在value 列中保留科学记数法?

【问题讨论】:

您应该做的是保留科学记数法并以编程方式更改标签 【参考方案1】:

所有关于这方面的既定智慧似乎都分为两个阵营。一个阵营说在options 中使用scipen,由于您描述的原因,您不喜欢它。

另一种解决方案是在绘制图形时保留科学记数法并替换刻度线标签。

您可以使用formatscientific=F 来创建非科学刻度标记标签。本指南展示了如何为不同的 ggplot2 图自定义这些标签:

http://www.sthda.com/english/wiki/ggplot2-axis-ticks-a-guide-to-customize-tick-marks-and-labels

【讨论】:

是的,你是对的。我知道我可以更改 ggplot 的格式,但我希望有一个没有scipen 的替代方案。

以上是关于将值从 0.001 等转换为科学记数法 1e-3 时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

无法将值从因子转换为仅数字

将值从字段转换为绝对值

在字典中,将值从字符串转换为整数

将值从字符转换为数字或从数字转换为字符

将值从 datagridview 转换为文本框

MySQL:无法更新 JSON 列以将值从浮点数转换为整数