Если вы ограничиваете свою выборку определенным средним значением, тогда это не действительно случайная выборка. Однако есть разные способы сделать это, но ни один из них не прост. Это зависит от распределения возрастов в вашей выборке, чего, конечно, у меня нет.
В любом случае, следующий кадр данных будет немного похож на ваш:
set.seed(772)
df <- data.frame(age = sample(25:90, 120, T), ID = factor(1:120))
Мы можем видим, что у него есть возраст с правильным диапазоном и о правильном среднем значении:
range(df$age)
#> [1] 25 90
mean(df$age)
#> [1] 51.23333
Теперь, чтобы получить возраст выборки в среднем до 40 лет, вам нужно будет сделать выборку преимущественно из младшей группы. Сначала мы найдем индексы «старых» и «молодых» участников:
young <- which(df$age <= 40)
old <- which(df$age > 40)
Теперь нам нужно просто попробовать много образцов (через al oop), пока среднее значение не приблизится к 40 Чтобы сделать это без полного усечения старшего возраста, мы возьмем соотношение молодых и старых участников 2: 1 для каждой выборки. Для этого вам понадобится не менее 40 участников в возрасте до 40 лет, которые, как я предполагаю, у вас есть.
seed <- 1
while(TRUE)
{
set.seed(seed)
young_indices <- young[sample(length(young), 40)]
old_indices <- old[sample(length(old), 20)]
indices <- c(young_indices, old_indices)
if(abs(mean(df$age[indices]) - 40) < 0.25) break
seed <- seed + 1
}
sample_df <- df[indices,]
Теперь sample_df
будет содержать 60 уникальных участников, средний возраст которых составляет около 40;
nrow(sample_df)
#> [1] 60
mean(sample_df$age)
#> [1] 40.1