Простым решением было бы sample
1/4 для каждой комбинации, надеясь, что эта комбинация существует:
n <- 1e2 / 4
y <- x[c(sample(which(x$et & x$ed), n, TRUE)
, sample(which(!x$et & x$ed), n, TRUE)
, sample(which(x$et & !x$ed), n, TRUE)
, sample(which(!x$et & !x$ed), n, TRUE)),]
table(y)
# ed
#et FALSE TRUE
# FALSE 25 25
# TRUE 25 25
В случае, если комбинация не существует, вы можете получить пропорциюкаждая комбинация с table
как:
n <- 1e2
x <- x[!x$et | x$ed,]
tt <- table(x)
tt <- tt * t(tt)
tt <- tt / rowSums(tt)
tt <- tt / rep(colSums(tt), each=2)
tt <- round(prop.table(tt)*n) #Here the target number might not be reached
y <- x[c(sample(which(!x$et & !x$ed), tt[1], TRUE)
, sample(which(x$et & !x$ed), tt[2], TRUE)
, sample(which(!x$et & x$ed), tt[3], TRUE)
, sample(which(x$et & x$ed), tt[4], TRUE)),]
table(y)
# ed
#et FALSE TRUE
# FALSE 50 0
# TRUE 0 50
Данные:
set.seed(7)
n <- 1e4
x <- data.frame(et=sample(c(TRUE,FALSE), n, TRUE, c(.25,.75)), ed=sample(c(TRUE,FALSE), n, TRUE, c(.75,.25)))