【问题标题】:R Conditional IfElse With Random ValuesR 条件 IfElse 与随机值
【发布时间】:2020-04-06 14:07:09
【问题描述】:
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)

我希望用这条规则创建“想要”: 如果狗 > 猫, “想要” = (狗 - 猫) * (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 <- 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

我希望这个比例每次狗 > 猫都不同

【问题讨论】:

    标签: r if-statement data.table


    【解决方案1】:

    您可以通过sampleing 进行此操作:

    data1$Want = 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 &gt; data1$Cat, (data1$Dog - data1$Cat) * (1 - runif(sample(1:10,1, replace = T), 0.5, 0.9)), -99)
    • 好的,很高兴它有帮助。我会相应地更新我的答案。请随意点击绿色勾号接受它!
    【解决方案2】:

    您可以尝试ifelse,如下所示

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

    【讨论】:

    • 谢谢,但它仍然使用相同的值@ThomasIsCoding
    • @bvowe 感谢您的反馈!我更新了我的解决方案,在ifelse 中使用runif(nrow(data1), 0.5, 0.9) 而不是runif(1, 0.5, 0.9)
    【解决方案3】:

    我们可以使用case_when

    library(dplyr)
    data1 %>% 
       mutate(Want = case_when(Dog > Cat ~ (Dog - Cat)* 
          (1 - runif(sample(1:10,1, replace = T), 0.5, 0.9)), TRUE ~ -99))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 2016-03-07
      相关资源
      最近更新 更多