【发布时间】:2014-02-26 20:40:02
【问题描述】:
我一直在努力使用我认为非常明智的规则来格式化 R 中的数字。我想要的是指定一些有效数字(比如 3),保留有效零,并保留小数点之前的所有数字,一些示例(有 3 个有效数字):
1.23456 -> "1.23"
12.3456 -> "12.3"
123.456 -> "123"
1234.56 -> "1235"
12345.6 -> "12346"
1.50000 -> "1.50"
1.49999 -> "1.50"
R 中是否有进行这种格式化的函数?如果没有,怎么办?
我觉得这些是非常明智的格式化规则,但我还没有设法在 R 中找到以这种方式格式化的函数。据我搜索,这不是许多类似问题的重复,例如 this
编辑:
受到两个好的答案的启发,我自己整理了一个我认为适用于所有情况的函数:
sign_digits <- function(x,d){
s <- format(x,digits=d)
if(grepl("\\.", s) && ! grepl("e", s)) {
n_sign_digits <- nchar(s) -
max( grepl("\\.", s), attr(regexpr("(^[-0.]*)", s), "match.length") )
n_zeros <- max(0, d - n_sign_digits)
s <- paste(s, paste(rep("0", n_zeros), collapse=""), sep="")
}
s
}
【问题讨论】:
标签: r formatting number-formatting