0

可能重复:
R 舍入到最接近的 0.5 或 0.1
如何舍入到 1、1.5、2 等,而不是 R 中的 1、2 或 1.1、1.2、1.3?

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

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 ... 等等?

谢谢,

4

3 回答 3

6
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
于 2012-08-17T15:15:04.997 回答
4

这会有帮助吗

b <- rnorm(n = 10, mean = .5, sd = .1) 
b
library(plyr)
round_any(b, 0.1)
于 2012-08-17T15:42:22.523 回答
2

@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,我会使用sampleand seq

> 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参数 to sample。如果您想从没有明确定义的上限和下限的不同分布(例如正态分布)中提取数据,您可能会也可能不会遇到类似的问题。您需要仔细考虑并运行许多测试,以确保您获得所需的发行版。

于 2012-08-17T15:45:18.333 回答