【问题标题】:Rounding numbers to nearest 10 in R在 R 中将数字四舍五入到最接近的 10
【发布时间】:2013-08-31 19:37:51
【问题描述】:

现在,关于四舍五入和重要性的一些非常相似的问题,但未解决我的问题。这里是:

如何对这些随机出现的数字进行舍入:

data <- c(152.335, 39.431, 21.894)

我想让它们像这样四舍五入:

c(150,40,20)

我试过了:

print(formatC(signif(data,digits=2), digits=2,format="f"))

输出:

[1] "150.00" "39.00"  "22.00"

上述命令要求我将digits= 更改为1 或2 以获得所需的结果。但是,我想要一个适合所有命令的全局命令。谢谢。

【问题讨论】:

  • SO 21.8 转 20?这没有意义。
  • @Fernando,Max 似乎希望四舍五入到最接近的 10。
  • @Henrik:是的,谢谢。就是这个。实际上 plyr 包可以满足我的需要。那就是:round_any(data, 5)
  • @Max,我可以建议你让你的标题更具体,在你希望四舍五入到最接近的 10 的意义上,更一般的意义上你的问题可能也适用于数字以外的数字随机数。这使得其他人在搜索 SO 时更容易找到答案。

标签: r


【解决方案1】:

来自?round

四舍五入到负数意味着四舍五入到幂 十个,例如'round(x,digits = -2)'四舍五入到 最接近的百位。

所以,

data <- c(152.335, 39.431, 21.894)
round(data, -1)
#[1] 150  40  20

【讨论】:

    【解决方案2】:

    您实际上想要在这里为signif 提供不同的参数。这似乎可以解决问题——第一个参数为 2 位,后两位为 1:

    R> dat <- c(152.335, 39.431, 21.894)
    R> dat
    [1] 152.335  39.431  21.894
    R> signif(dat, digits=c(2,1,1))
    [1] 150  40  20
    R> 
    

    你可以通过类似

    的方式来概括这一点
    R> signif(dat, digits=floor(log10(dat)))
    [1] 150  40  20
    R> 
    

    【讨论】:

    • 谢谢。实际上刚刚发现(正如 Henrik 指出的那样), plyr 包命令: round_any(data, 5) 可以满足我的需要。但是您的解决方案来自 R basic,因此不需要任何软件包!
    猜你喜欢
    • 2017-05-03
    • 2011-03-21
    • 2017-07-26
    • 2023-02-05
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多