Принимая набор значений с равным или аналогичным средним значением в R

#r

Вопрос:

Я работаю с Р.

У меня есть два набора ценностей. Они выглядят вот так.

 setA     setB 
 .88      .55
 .67      .45
 .25      .35
 .40      .18
 .50      .05
 .70      .90
 .40      .25
 .57      .27
 .69      .21
 .90      .30
 

Я взял пять значений сетА…

 setA
.88
.40
.90
.57
.70
 

Среднее значение этого набора слов равно 0,69.

Есть ли способ выбрать значения setB, которые будут иметь одинаковое или очень похожее среднее значение 0,69?

Итак, мне нужна «случайная» выборка setB, которая в конечном итоге будет иметь среднее значение, равное или около 0,69.

(На самом деле у меня 800 значений в setA, поэтому очень сложно выбрать значения setB, просто посмотрев на них).

Комментарии:

1. Звучит как задача целочисленного линейного программирования, которую вы можете решить с помощью пакета lpSolve ( cran.r-project.org/web/packages/lpSolve/index.html ). Но целочисленное программирование может быть медленным для большого размера входных данных. Вам нужен строгий оптимум или принимается приближение?

2. приближение принято. @КотаМори

3. С заменой или без нее? Соответствуют ли данные/приближаются ли к общему распределению (возможно, показывают гистограмму и предоставляют среднее значение/дисперсию)?

4. Сколько значений содержится в вашем наборе?

5. У меня в общей сложности 400 на колонку, но мне нужно только 20 из них. @jblood94

Ответ №1:

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

 exact_match <- function(setA, setB) {
  mean_setA_sample <- mean(sample(setA, 5))
  mean_setB_sample <- 0
  setB_sample <- c()
  iterations <- 0
  while (mean_setB_sample != mean_setA_sample) {
    setB_sample <- sample(setB, 5)
    mean_setB_sample <- mean(setB_sample)
    iterations <- iterations   1
  }
  print(iterations)
  print(setB_sample)
  print(mean_setA_sample)
  print(mean_setB_sample)
}

close_match <- function(setA, setB, difference) {
  mean_setA_sample <- mean(sample(setA, 5))
  mean_setB_sample <- 0
  setB_sample <- c()
  iterations <- 0
  while (abs(mean_setB_sample-mean_setA_sample) > difference) {
    setB_sample <- sample(setB, 5)
    mean_setB_sample <- mean(setB_sample)
    iterations <- iterations   1
  }
  print(iterations)
  print(setB_sample)
  print(mean_setA_sample)
  print(mean_setB_sample)
}
 

Редактировать
Я обновил функции и включил решение для близкого соответствия.