R Условный IfElse со случайными значениями - PullRequest
1 голос
/ 06 апреля 2020
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)

I sh, чтобы создать «Хочу» с этим правилом: если Dog> Cat, «Want» = (Dog - Cat) * (1-runif (1, 0.5, 0.9))

Однако, когда я делаю это с «Try», он использует одно и то же случайное значение «runif», однако, каждый раз, когда Dog> Cat I w sh генерирует новое значение из «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

I w * sh, чтобы это соотношение каждый раз отличалось Собака> Кошка

Ответы [ 3 ]

1 голос
/ 06 апреля 2020

Вы можете попробовать ifelse, как показано ниже

data1 <- within(data1, Want <- ifelse(Dog-Cat>0,(Dog-Cat)*(1-runif(nrow(data1), 0.5, 0.9)),-99))
1 голос
/ 06 апреля 2020

Мы можем использовать 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))
1 голос
/ 06 апреля 2020

Вы можете сделать это с помощью sample ing:

data1$Want = ifelse(data1$Dog > data1$Cat, 
                (data1$Dog - data1$Cat) * (1-runif(sample(1:10,1, replace = T), 0.5, 0.9)), -99)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...