Я все еще не уверен, как столбец А влияет на это. Кажется, вы хотите создать новый столбец, который имеет два уровня, которые создают ~ = средние значения для столбца B. Столбец A, очевидно, связан с созданным новым столбцом, но напрямую не учитывает необходимые вычисления. Я что-то пропустил?
В любом случае, вот начало (обратите внимание, что это можно сделать гораздо более надежным, но доказательство концепции должно работать). Определите допустимое отклонение, которое вы сочтете приемлемым, а затем настройте цикл while для создания новых групп, пока не будет выполнено условие, т. Е.
FUN <- function(tol){
df$groups <- sample(1:2, nrow(df), TRUE)
while(abs(mean(df$B[df$groups == 1]) - mean(df$B[df$groups == 2])) > tol) {
df$groups <- sample(1:2, nrow(df), TRUE)
}
return(df)
}
set.seed(101)
df <- data.frame(A=runif(20),B=runif(20))
#Test it. Means should be less than .02 different and have roughly equivalent sample sizes.
set.seed(101)
out <- FUN(.02)
library(plyr)
> ddply(out, "groups", summarize, n = length(B), mean = mean(B))
groups n mean
1 1 11 0.5229024
2 2 9 0.5037279
Я должен заметить, что вы можете создать убегающую функцию, если вы установите tol
super low, поэтому не вините меня, если ваш компьютер выходит из строя.