【问题标题】:R, rounding, ceiling and floorsR,四舍五入,天花板和地板
【发布时间】:2013-05-27 04:02:22
【问题描述】:

假设有一堆从 pnorm() 返回的数据,这样你就得到了介于 .0003ish 和 .9999ish 之间的数字。

numbers     <- round(rnorm(n = 10000, mean = 100, sd = 15))
percentiles <- pnorm(numbers, mean = 100, sd = 15)*100

然后进一步假设有人有兴趣将百分位数四舍五入,这样 0.0003 或 whatevs 将得出 1(因此上限()),但 99.999 会得出 99(因此下限())。

我想我正在寻找的是 round() ,它以某种方式出色地知道在极端情况下将其反转,但据我所知,不存在这样的东西。我将不得不用 if 语句来丑化它吗?有没有更好的方法来处理这种事情?

【问题讨论】:

    标签: r rounding


    【解决方案1】:

    您可以使用round 并在末端使用pminpmax 将内容强制转换为199

    pmax(1, pmin(99, round(percentiles)))
    

    【讨论】:

    • 这是一个很好的解决方案。在这种情况下,事先使用 pmax() 和 pmin() 会更好吗?很难说它是否重要。 test1 &lt;- pmax(1, pmin(99, round(percentiles))) test2 &lt;- round(pmax(1, pmin(99, percentiles))) all.equal(test1, test2) 似乎暗示至少在这种情况下是一样的。我的意思是,如果我做得对的话!
    • 没关系,因为这三个函数中的每一个都是在全向量上运行的。如果pmaxpmin 函数在处理integer 时比numeric 更快,那么可能会有所不同的是pmax(1L, pmin(99L, as.numeric(round(percentiles)))),但正如我测试的那样,情况似乎并非如此。跨度>
    • 这完全有道理。谢谢! :D
    猜你喜欢
    • 2019-02-13
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2010-09-18
    • 2017-11-26
    • 1970-01-01
    相关资源
    最近更新 更多