Дифференцированная частота выборки по группам - PullRequest
2 голосов
/ 30 октября 2019

При обучении модели машинного обучения я пытаюсь сэмплировать фрейм данных, который имеет переменную группировки, чтобы каждая группа обрабатывалась по разному правилу выборки. Например, мои данные:

df = data.frame(value = 1:10, label=c("a", "a", "b", rep("c", 7)))

Для групп с размером, скажем, 3, я хочу взять всю группу и не более, а для больших групп я хочу взять образец с размером 3 беззамена.

Итак, здесь может быть результат: df[c(1:3, 6,9,10),]

Если я использую group_by и sample_n, я получаю ошибку размера. Я думал о том, чтобы перейти к «ручному» анализу с разделением и дифференцированной выборкой, а затем снова связать строки, но есть ли более эффективный и прямой способ?

1 Ответ

2 голосов
/ 30 октября 2019

Используя размер группы n(), в sample_n.

df %>% group_by(label) %>% sample_n(min(n(), 3))

# A tibble: 6 x 3
# Groups:   label [3]
#  value label     n
#  <int> <fct> <int>
#1     1 a         2
#2     2 a         2
#3     3 b         1
#4     5 c         7
#5    10 c         7
#6     4 c         7
...