Частота управления по случайной генерации

Я должен сделать случайный кадр данных, который состоит из 2 функций

gender <- sample(c("Male","Female"), 10000, replace = TRUE, prob = c( 0.5, 0.5))
handed <- sample(c("left_Handed","right_Handed"), 10000, replace = TRUE, prob = c( 0.1, 0.9))

data <- data.frame(gender = gender, handed = handed)
table(data$gender, data$handed)

и это работает нормально, но мне нужно сделать так, чтобы только 1 ячейка таблицы имела значение от 50 до 90.

Я не знаю, как я могу это сделать?

Текущая таблица дает мне

             left_Handed   right_Handed
  Female          59         4922
  Male            55         4964

как видите, это дает мне 2 ячейки со значениями ниже 100.

1 ответ

Вы можете использовать хит и мисс подход:

f <- function(){
    gender <- sample( c("Male","Female"), 10000, replace=TRUE, prob=c( 0.5, 0.5) )
    handed <- sample( c("left_Handed","right_Handed"), 10000, replace=TRUE, prob=c( 0.01, 0.9) )
    data<-data.frame(gender=gender,handed=handed)
    tb <- table(data$gender,data$handed)
    if (min(tb[,1]) < 50 && max(tb[,1])>=50) tb else f()
}

Эта функция рекурсивно запускает ваш код, пока не получит вывод, который ему нравится.

Типичный пробег:

> f()

         left_Handed right_Handed
  Female          59         4970
  Male            48         4923

Конечно, было бы достаточно легко изменить функцию так, чтобы она использовала цикл, а не рекурсию, но приведенный выше код немного более сжат, и с ожидаемыми значениями ячеек в первом столбце, равными 50, никогда не бывает больше, чем требуется несколько рекурсивных вызовов, поэтому пространство в стеке не является проблемой.

Другие вопросы по тегам