我知道这可能是一个愚蠢的问题,但我认为事情应该更清楚。我的意思是将数字从正常格式转换为科学格式,例如从通常的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
当我们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)
使用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列已更改为原始格式。我们如何在value
栏中保留科学记数法?
答案 0 :(得分:2)
所有已确立的智慧似乎都属于两个阵营。一个阵营说在scipen
中使用options
,由于您所描述的原因,您不喜欢这样做。{/ p>
另一种解决方案是在绘制图表时留下科学记数法并替换刻度标记。
您可以将format
与scientific=F
一起使用来创建非科学的刻度标记。本指南介绍了如何为不同的ggplot2
图表自定义这些标签:
http://www.sthda.com/english/wiki/ggplot2-axis-ticks-a-guide-to-customize-tick-marks-and-labels