R:如果另一个向量中的值在 x 和 y 之间,则范围之间的随机数

Posted

技术标签:

【中文标题】R:如果另一个向量中的值在 x 和 y 之间,则范围之间的随机数【英文标题】:R: Random number between range if value in another vector is between x and y 【发布时间】:2018-02-02 03:10:29 【问题描述】:

我在 data.frame E 中有一个向量 ACCNS。ACCNS 有离散值 0、1、5、12、26 或 40。我想制作另一个向量 ACCNSrandom,它的“runif”值基于 0 -1、1-5、5-12、12-26、26-40 和 40-100。我已经用嵌套的 ifelse 尝试过,但每次都得到相同的值(如报告的here)。我无法弄清楚如何将该帖子中给出的答案应用于更一般的形式。任何帮助将不胜感激。

E<-data.frame(ACCNS=sample(c(0,1,2.5,5,12,26,40),50,replace = T))

E$ACCNSrandom <- ifelse( E$ACCNS == 0, runif(1,0,1),
                         ifelse(E$ACCNS>0 & E$ACCNS <= 2.5, runif(1,1,2.5),
                         ifelse( E$ACCNS > 2.5 & E$ACCNS<12, runif(1,2.5,12), 
                                 ifelse( E$ACCNS >= 12 & E$ACCNS<40, runif(1,12,40),  
                                         ifelse( E$ACCNS >= 40 & E$ACCNS<100, runif(1,40,100),0 
                                                  )  )  ) ) )

【问题讨论】:

我愿意接受任何解决方案,只要它是一个小数而不是一个因素,因为我需要稍后将它与另一个数字相乘。 您应该在问题中包含此评论,它是其中的一部分。 【参考方案1】:

一个简单的矢量化解决方案:

lower <- c(0, 1, 2.5, 5, 12, 26, 40)
upper <- c(lower[-1], 100)
E <- data.frame(ACCNS = sample(lower, 50, replace = TRUE))

ind <- match(E$ACCNS, lower)
E$ACCNSrandom <- runif(length(ind), lower[ind], upper[ind])

【讨论】:

@akrun 我不明白你的话。你能解释更多吗? 不这么认为。 “ACCNS 具有离散值 0、1、5、12、26 或 40。”他说。 您希望在之前定义ACCNS,在之后使用lower &lt;- sort(unique(E$ACCNS)) 无论如何,我正在删除 cmets。我认为它不适用于所有情况 非常感谢,我愿意接受你的回答,因为它看起来很简洁。【参考方案2】:

这是做你想做的事情的一种方法。

set.seed(1234)  # make it reproducible

i1 <- E$ACCNS == 0
i2 <- 0 < E$ACCNS & E$ACCNS <= 2.5
i3 <- 2.5 < E$ACCNS & E$ACCNS < 12
i4 <- 12 <= E$ACCNS & E$ACCNS < 40
i5 <-  40 <= E$ACCNS & E$ACCNS < 100

E$ACCNSrandom <- numeric(nrow(E))
E$ACCNSrandom[i1] <- runif(sum(i1), 0, 1)
E$ACCNSrandom[i2] <- runif(sum(i2), 1, 2.5)
E$ACCNSrandom[i3] <- runif(sum(i3), 2.5, 12)
E$ACCNSrandom[i4] <- runif(sum(i4), 12, 40)
E$ACCNSrandom[i5] <- runif(sum(i5), 40, 100)

E$ACCNSrandom

【讨论】:

非常感谢您的回答。我愿意接受 F. Privés,因为它似乎更快。 @HCAI 很高兴为您提供帮助。至于你接受的那一个,显然是你自己的选择。

以上是关于R:如果另一个向量中的值在 x 和 y 之间,则范围之间的随机数的主要内容,如果未能解决你的问题,请参考以下文章

计算由另一列值分组的列值在 pandas 数据框中的共现

将向量的每个元素与 R 中的另一个向量组合

余弦相似度

matlab 摘要

绘图中的颜色点因值向量而异

用MATLAB怎么画图啊