具有随机值的R条件IfElse

具有随机值的R条件IfElse,r,if-statement,data.table,R,If Statement,Data.table,我希望使用此规则创建“想要”: 如果狗>猫, “想要”=(狗-猫)*(1-runif(1,0.5,0.9)) 但是,当我使用“Try”时,它使用相同的随机“runif”值,但是,每次Dog>Cat时,我都希望从“runif”生成一个新值,而不是每次都使用相同的值 data1 = data.frame("Cat" = c(8,4,3,7), "Dog"=c(4,7,10,5), "Want"=NA) data1$Try

我希望使用此规则创建“想要”: 如果狗>猫, “想要”=(狗-猫)*(1-runif(1,0.5,0.9))

但是,当我使用“Try”时,它使用相同的随机“runif”值,但是,每次Dog>Cat时,我都希望从“runif”生成一个新值,而不是每次都使用相同的值

data1 = data.frame("Cat" = c(8,4,3,7),
                   "Dog"=c(4,7,10,5),
                   "Want"=NA)

data1$Try = ifelse(data1$Dog > data1$Cat, (data1$Dog - data1$Cat) * (1-runif(1, 0.5, 0.9)), -99)
data1=data.frame(“Cat”=c(8,4,3,7),
“Dog”=c(4,7,10,5),
“想要”=NA)

data1 Cat

您可以通过
sample
ing:

data1 = data.frame("Cat" = c(8,4,3,7),
                   "Dog"=c(4,7,10,5),
                   "Want"=NA)

data1 <- within(data1, Want2 <- ifelse(Dog-Cat>0,(Dog-Cat)*(1-runif(1, 0.5, 0.9)),-99))
data1$Dif = (data1$Dog - data1$Cat)/data1$Want2

您可以通过
sample
ing:

data1 = data.frame("Cat" = c(8,4,3,7),
                   "Dog"=c(4,7,10,5),
                   "Want"=NA)

data1 <- within(data1, Want2 <- ifelse(Dog-Cat>0,(Dog-Cat)*(1-runif(1, 0.5, 0.9)),-99))
data1$Dif = (data1$Dog - data1$Cat)/data1$Want2

您可以像下面这样尝试
ifelse

data1$Want = ifelse(data1$Dog > data1$Cat, 
                (data1$Dog - data1$Cat) * (1-runif(sample(1:10,1, replace = T), 0.5, 0.9)), -99)

data1您可以像下面这样尝试
ifelse

data1$Want = ifelse(data1$Dog > data1$Cat, 
                (data1$Dog - data1$Cat) * (1-runif(sample(1:10,1, replace = T), 0.5, 0.9)), -99)

data1当

data1 <- within(data1, Want <- ifelse(Dog-Cat>0,(Dog-Cat)*(1-runif(nrow(data1), 0.5, 0.9)),-99))

data1 <- within(data1, Want <- ifelse(Dog-Cat>0,(Dog-Cat)*(1-runif(nrow(data1), 0.5, 0.9)),-99))

是的,但我希望在上述同一迭代中,每次Dog>Cat时的值都不同。请看帖子上的新评论,非常感谢@Chris Ruehlemann如果你把
sample
**放在**
runif
后面会有什么不同,因此:
data1$Want3=ifelse(data1$Dog>data1$Cat,(data1$Dog-data1$Cat)*(1-runif(sample(1:10,1,replace=T),0.5,0.9)),-99)
?好的,我很高兴这有帮助。我会相应地更新我的答案。点击绿色的勾号即可接受!是的,但我希望在上述同一迭代中,每次Dog>Cat时的值都不同。请看帖子上的新评论,非常感谢@Chris Ruehlemann如果你把
sample
**放在**
runif
后面会有什么不同,因此:
data1$Want3=ifelse(data1$Dog>data1$Cat,(data1$Dog-data1$Cat)*(1-runif(sample(1:10,1,replace=T),0.5,0.9)),-99)
?好的,我很高兴这有帮助。我会相应地更新我的答案。点击绿色的勾号即可接受!谢谢,但它仍然使用相同的值@ThomasIsCoding@bvowe感谢您的反馈!我更新了我的解决方案,其中使用了
runif(nrow(data1),0.5,0.9)
,而不是
ifelse中的
runif(1,0.5,0.9)
,谢谢,但它仍然使用相同的值@ThomasIsCoding@bvowe感谢您的反馈!我更新了我的解决方案,其中使用
runif(nrow(data1),0.5,0.9)
代替
ifelse中的
runif(1,0.5,0.9)