可能重复:
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 ...等等?
谢谢,
答案 0 :(得分:5)
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
答案 1 :(得分:3)
这会有帮助吗
b <- rnorm(n = 10, mean = .5, sd = .1)
b
library(plyr)
round_any(b, 0.1)
答案 2 :(得分: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
为增量的均匀随机样本,我会使用sample
和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
参数sample
。
如果您想要从不具有明确定义的上限和下限的不同分布中绘制,例如正态分布,您可能会或可能不会遇到类似的问题。您需要仔细考虑并运行许多测试,以确保获得所需的分发。