R 如何按固定间隔对数字进行四舍五入

R 如何按固定间隔对数字进行四舍五入,r,R,可能重复: 如果我想在逗号后用一些数字对数字进行四舍五入 a <- 2.1357 以获得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 现在我的问题是:如果我想把它们四舍五入,以

可能重复:

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

a <- 2.1357
以获得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.2? 还是0.3?或0.25。。。等等

谢谢,这有帮助吗

a <- runif(20)  # Data
mult <- .125    # Multiple
mult*round(a/mult)
b <- rnorm(n = 10, mean = .5, sd = .1) 
b
library(plyr)
round_any(b, 0.1)

@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 
这就是我建议你从均匀分布中得出的结论。如果要对可能的结果赋予不同的权重,可以使用prob参数进行采样。 如果您想从没有明确定义上限和下限的不同分布(如正态分布)中提取,您可能会遇到或可能不会遇到类似的问题。您需要仔细考虑并运行许多测试,以确保获得所需的分发版本。

Duplicates:,
 [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
b <- rnorm(n = 10, mean = .5, sd = .1) 
b
library(plyr)
round_any(b, 0.1)
> 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 
> 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