如何在 R 数据框中制作漂亮的 "auto" 数字格式?
How to make nice "auto" numeric format in R dataframe?
R 或 R studio 是否有任何选项可用于 "auto" 要显示或导出的数字表示形式。就像我在一列中有非常小的数字,比如 0.000023,所以它应该显示或导出为“2.3e-05”,但是另一个数字,如 10.23 应该显示 "as is",而不将其更改为 "exponential" 格式。
>
rf_test
RfC RfD_ing RfD_per RfD_derm
2 0.00002 NA 2.0e-03 NA
3 0.10000 NA 1.1e+01 NA
4 0.00500 1.43e-03 1.0e+00 0.100000
5 0.03000 NA 4.0e+00 NA
6 0.00007 NA 2.0e-02 0.000070
7 1.00000 2.86e-05 5.0e-03 0.000060
8 0.00005 1.43e-05 1.4e-01 0.001840
....
像这样导出时,导出文件看起来比在 RStudio 控制台中更令人讨厌:
write.table(rf_test, "rf_test.dat", sep = "\t", row.names = FALSE, na = "NA")
File with table
对这种格式有什么建议吗?
您是否尝试过 format()
函数(或者,如果您想更严格地控制数字的显示方式,formatC()
函数)
您可以编写自己的函数,在 if/else 语句中使用整数除法 %/%
运算符来决定在更改格式之前数字应有多少位小数。像这样:
test_func <- function(x){
res <- 0
res <- ifelse(x %/% 0.0001 > 0, format(x, scientific = FALSE, trim = TRUE), format(x, scientific = TRUE))
return(res)
}
结果:
print(rf_test %>% mutate(RfD_per_new = test_func(RfD_per)), n = 26)
# A tibble: 26 x 5
RfC RfD_ing RfD_per RfD_derm RfD_per_new
<dbl> <dbl> <dbl> <dbl> <chr>
1 0.00002 NA 0.002 NA 0.00200
2 0.1 NA 11 NA 11.00000
3 0.005 0.00143 1 0.1 1.00000
4 0.03 NA 4 NA 4.00000
5 0.000070 NA 0.02 0.000070 0.02000
6 1 0.0000286 0.005 0.00006 0.00500
7 0.00005 0.0000143 0.14 0.00184 0.14000
8 0.6 NA 0.3 NA 0.30000
9 0.00002 0.00000571 0.02 0.016 0.02000
10 0.00005 NA 0.02 0.0054 0.02000
11 0.00002 0.0402 0.019 0.012 0.01900
12 0.0009 0.3 0.3 0.06 0.30000
13 0.04 NA NA NA NA
14 0.00003 0.000300 0.000300 0.000123 0.00030
15 0.00008 NA 0.005 NA 0.00500
16 0.012 NA 0.005 0.0019 0.00500
17 0.02 NA 0.005 0.0009 0.00500
18 0.00002 0.0000571 0.0005 0.00001 0.00050
19 0.02 NA 0.6 NA 0.60000
20 0.0004 0.000395 0.0004 0.000008 0.00040
21 0.0005 0.000143 0.07 0.0049 0.07000
22 0.0002 NA NA NA NA
23 0.1 NA 0.0025 NA 0.00250
24 0.000300 0.0000857 0.000300 0.000021 0.00030
25 0.00023 NA 0.000070 NA 7.0e-05
26 0.0005 0.00352 0.0035 0.000525 0.00350
根据自己的喜好更改整数除法运算符后的数字以调整分界点。
这行得通吗? :)
R 或 R studio 是否有任何选项可用于 "auto" 要显示或导出的数字表示形式。就像我在一列中有非常小的数字,比如 0.000023,所以它应该显示或导出为“2.3e-05”,但是另一个数字,如 10.23 应该显示 "as is",而不将其更改为 "exponential" 格式。 >
rf_test
RfC RfD_ing RfD_per RfD_derm
2 0.00002 NA 2.0e-03 NA
3 0.10000 NA 1.1e+01 NA
4 0.00500 1.43e-03 1.0e+00 0.100000
5 0.03000 NA 4.0e+00 NA
6 0.00007 NA 2.0e-02 0.000070
7 1.00000 2.86e-05 5.0e-03 0.000060
8 0.00005 1.43e-05 1.4e-01 0.001840
....
像这样导出时,导出文件看起来比在 RStudio 控制台中更令人讨厌:
write.table(rf_test, "rf_test.dat", sep = "\t", row.names = FALSE, na = "NA")
File with table
对这种格式有什么建议吗?
您是否尝试过 format()
函数(或者,如果您想更严格地控制数字的显示方式,formatC()
函数)
您可以编写自己的函数,在 if/else 语句中使用整数除法 %/%
运算符来决定在更改格式之前数字应有多少位小数。像这样:
test_func <- function(x){
res <- 0
res <- ifelse(x %/% 0.0001 > 0, format(x, scientific = FALSE, trim = TRUE), format(x, scientific = TRUE))
return(res)
}
结果:
print(rf_test %>% mutate(RfD_per_new = test_func(RfD_per)), n = 26)
# A tibble: 26 x 5
RfC RfD_ing RfD_per RfD_derm RfD_per_new
<dbl> <dbl> <dbl> <dbl> <chr>
1 0.00002 NA 0.002 NA 0.00200
2 0.1 NA 11 NA 11.00000
3 0.005 0.00143 1 0.1 1.00000
4 0.03 NA 4 NA 4.00000
5 0.000070 NA 0.02 0.000070 0.02000
6 1 0.0000286 0.005 0.00006 0.00500
7 0.00005 0.0000143 0.14 0.00184 0.14000
8 0.6 NA 0.3 NA 0.30000
9 0.00002 0.00000571 0.02 0.016 0.02000
10 0.00005 NA 0.02 0.0054 0.02000
11 0.00002 0.0402 0.019 0.012 0.01900
12 0.0009 0.3 0.3 0.06 0.30000
13 0.04 NA NA NA NA
14 0.00003 0.000300 0.000300 0.000123 0.00030
15 0.00008 NA 0.005 NA 0.00500
16 0.012 NA 0.005 0.0019 0.00500
17 0.02 NA 0.005 0.0009 0.00500
18 0.00002 0.0000571 0.0005 0.00001 0.00050
19 0.02 NA 0.6 NA 0.60000
20 0.0004 0.000395 0.0004 0.000008 0.00040
21 0.0005 0.000143 0.07 0.0049 0.07000
22 0.0002 NA NA NA NA
23 0.1 NA 0.0025 NA 0.00250
24 0.000300 0.0000857 0.000300 0.000021 0.00030
25 0.00023 NA 0.000070 NA 7.0e-05
26 0.0005 0.00352 0.0035 0.000525 0.00350
根据自己的喜好更改整数除法运算符后的数字以调整分界点。
这行得通吗? :)