Я пытаюсь применить функцию выборки сгруппированным образом к фрейму данных, где он должен выбрать n выборок из каждой группы, или всех членов группы, если размер группы меньше, чем n .
Используя dplyr, я сначала попробовал
library(dplyr)
mtcars %>% group_by(cyl) %>% sample_n(2)
. Это работает, когда n меньше всех размеров группы, но не принимает полную группу, когда я выбираю n больше, чем размер группы (обратите внимание, чтов одной из групп цилиндров есть 7 машин):
mtcars %>% group_by(cyl) %>% sample_n(8)
Error: `size` must be less or equal than 7 (size of data),
set `replace` = TRUE to use sampling with replacement
Я попытался решить эту проблему, создав адаптированную функцию group_n, например:
sample_n_or_all <- function(tbl, n) {
if (nrow(tbl) < n)return(tbl)
sample_n(tbl, n)
}
, но с использованием своей пользовательской функции (mtcars %>% group_by(cyl) %>% sample_n_or_all(8)
) генерирует ту же ошибку.
Какие-либо предложения, как я могу адаптировать свою функцию, чтобы я мог применить ее к каждой из групп?Или другое решение проблемы?