【问题标题】:How to round numbers according to a fixed interval [duplicate]如何根据固定间隔对数字进行舍入[重复]
【发布时间】:2012-08-17 15:11:53
【问题描述】:

可能重复:
R round to nearest .5 or .1
How do I round to 1, 1.5, 2 etc instead of 1, 2 or 1.1, 1.2, 1.3 in R?

如果我想用逗号后一些数字对数字进行四舍五入

a <- 2.1357

我可以使用

round(a, 1)

得到 2.1 作为结果。

现在让我有一个像这样的数字数组

b <- rnorm(n = 10, mean = .5, sd = .1)
> b
[1] 0.5554950 0.4527671 0.5217543 0.6137458 0.6023219 0.7045009 0.5140363 0.5312920
[9] 0.5841152 0.4492901

如果我想将这些数字四舍五入以使它们成为 0.1 的倍数,输入就足够了

round(b, 1)

现在我的问题是:如果我想将它们四舍五入以得到... 0.2 的倍数怎么办?还是0.3?还是 0.25... 等等?

谢谢,

【问题讨论】:

标签: r


【解决方案1】:
a <- runif(20)  # Data
mult <- .125    # Multiple
mult*round(a/mult)

得到你

 [1] 0.250 0.750 0.125 0.625 0.000 0.500 0.125 0.500 0.125 0.875 1.000 0.750
[13] 0.500 0.500 0.125 0.500 0.250 0.250 0.250 0.875

【讨论】:

    【解决方案2】:

    这有帮助吗

    b <- rnorm(n = 10, mean = .5, sd = .1) 
    b
    library(plyr)
    round_any(b, 0.1)
    

    【讨论】:

      【解决方案3】:

      @Backlin 提供的答案是执行此操作的最直接方法,但请注意,如果您关心最终结果的分布,则必须仔细考虑如何绘制样本。例如,以下是使用简单方法从随机制服中抽取 100 万次的结果:

      > a <- runif(1000000)
      > mult <- 0.125
      > samp <- mult * round(a/mult) 
      > table(samp)
      
      samp
           0  0.125   0.25  0.375    0.5  0.625   0.75  0.875      1 
       62889 125172 124564 125096 125443 124716 124899 124988  62233 
      

      请注意,即使原始数据是从统一的[0,1] 分布中提取的,0 和 1 在舍入分布的分布中的代表性不足。如果你真的想从[0,1] 之间以0.125 为增量的制服中随机抽样,我会使用sampleseq

      > rng <- seq(0, 1, 0.125)
      > samp <- sample(rng, 1000000, replace=TRUE)
      > table(samp)
      samp
           0  0.125   0.25  0.375    0.5  0.625   0.75  0.875      1 
      111206 111209 111222 110972 110617 111200 110827 111199 111548
      

      这就是我建议您从均匀分布中提取的方法。如果你想对可能的结果赋予不同的权重,你可以使用prob 参数到sample。 如果您想从没有明确定义的上限和下限的不同分布(例如正态分布)中提取数据,您可能会也可能不会遇到类似的问题。您需要仔细考虑并运行许多测试,以确保获得所需的分发版。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-24
        • 1970-01-01
        相关资源
        最近更新 更多