格式化R中的小数位数

问题描述 投票:221回答:12

我有一个数字,例如1.128347132904321674821,我想在输出到屏幕(或写入文件)时只显示两位小数。怎么做到这一点?

x <- 1.128347132904321674821

编辑:

指某东西的用途:

options(digits=2)

已被建议作为可能的答案。有没有办法在脚本中指定一次性使用?当我将它添加到我的脚本时,它似乎没有做任何不同的事情,我对很多重新键入格式化每个数字感兴趣(我正在自动化一个非常大的报告)。

--

答案:round(x,digits = 2)

r formatting rounding
12个回答
334
投票

背景:本页提供的一些答案(例如,signifoptions(digits=...))不保证为任意数字显示一定数量的小数。我认为这是R中的一个设计特征,其中良好的科学实践涉及根据“significant figures”的原则显示一定数量的数字。但是,在许多域(例如,APA style,业务报告)中,格式要求规定显示一定数量的小数位。这通常是为了一致性和标准化目的而不是关注重要数据。

解:

以下代码显示数字x的正好两位小数。

format(round(x, 2), nsmall = 2)

例如:

format(round(1.20, 2), nsmall = 2)
# [1] "1.20"
format(round(1, 2), nsmall = 2)
# [1] "1.00"
format(round(1.1234, 2), nsmall = 2)
# [1] "1.12"

更一般的函数如下,其中x是数字,k是要显示的小数位数。 trimws删除任何前导空格,如果你有一个数字向量,这可能很有用。

specify_decimal <- function(x, k) trimws(format(round(x, k), nsmall=k))

EG,

specify_decimal(1234, 5)
# [1] "1234.00000"
specify_decimal(0.1234, 5)
# [1] "0.12340"

2
投票

我正在使用此变体强制打印K小数位:

# format numeric value to K decimal places
formatDecimal <- function(x, k) format(round(x, k), trim=T, nsmall=k)

1
投票

在我看来会像是一样

library(tutoR)
format(1.128347132904321674821, 2)

每一点online help


1
投票

如果您只是要对数字或列表进行舍入,只需使用即可

round(data, 2)

然后,数据将舍入到小数点后2位。


26
投票

您可以根据需要格式化数字,例如x,最多小数位。这里x是一个有很多小数位的数字。假设我们希望显示此数字的最多8个小数位:

x = 1111111234.6547389758965789345
y = formatC(x, digits = 8, format = "f")
# [1] "1111111234.65473890"

这里format="f"给出通常小数位的浮点数,例如xxx.xxx,digits指定位数。相比之下,如果你想得到一个整数来显示你将使用format="d"(很像sprintf)。


20
投票

你可以尝试我的包formattable

> # devtools::install_github("renkun-ken/formattable")
> library(formattable)
> x <- formattable(1.128347132904321674821, digits = 2, format = "f")
> x
[1] 1.13

好消息是,x仍然是一个数字向量,您可以使用相同的格式进行更多的计算。

> x + 1
[1] 2.13

更好的是,数字不会丢失,您可以随时重新格式化更多数字:)

> formattable(x, digits = 6, format = "f")
[1] 1.128347

14
投票

假设您要保留尾随零,则为2位小数

sprintf(5.5, fmt = '%#.2f')

这使

[1] "5.50"

正如@mpag在下面提到的那样,似乎R有时可以用这个和圆形方法给出意想不到的值,例如: sprintf(5.5550,fmt ='%#。2f')给出5.55,而不是5.56


6
投票

检查函数prettyNum,格式

试用零(例如123.1240)使用sprintf(x, fmt='%#.4g')


5
投票

像这样的东西:

options(digits=2)

数字选项的定义:

digits: controls the number of digits to print when printing numeric values.

4
投票

如果您更喜欢有效数字到固定数字,那么signif命令可能很有用:

> signif(1.12345, digits = 3)
[1] 1.12
> signif(12.12345, digits = 3)
[1] 12.1
> signif(12345.12345, digits = 3)
[1] 12300

3
投票

函数formatC()可用于将数字格式化为两位小数。即使结果值包含尾随零,此函数也会给出两个小数位。


2
投票

请注意,R中的数字对象与double precision一起存储,它为您提供(大致)16位精度的十进制数字 - 其余的将是噪声。我承认上面显示的数字可能只是一个例子,但它长22位。

© www.soinside.com 2019 - 2024. All rights reserved.