R:如果另一个矢量中的值在x和y之间,则范围之间的随机数
我有一个矢量ACCNS在data.frame E. ACCNS具有离散值0,1,5,12,26或40.我想制作另一个具有基于0-1的'runif'值的矢量ACCNSrandom, 1-5,5-12,12-26,26-40和40-100。 我已经尝试过嵌套ifelse,但每次都获得相同的值(如此处所述)。 我无法解决如何将这篇文章中给出的答案应用到更一般的形式。 任何帮助将非常感激。
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
) ) ) ) )
简单的矢量化解决方案:
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])
这是做你想做的一种方法。
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
链接地址: http://www.djcxy.com/p/24877.html
上一篇: R: Random number between range if value in another vector is between x and y