Частота управления по случайной генерации
Я должен сделать случайный кадр данных, который состоит из 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, никогда не бывает больше, чем требуется несколько рекурсивных вызовов, поэтому пространство в стеке не является проблемой.