R - сохранить случайные строки для группы, но разные числа для группы - PullRequest
1 голос
/ 13 января 2020

Функция sample_n () из пакета dplyr позволяет случайным образом сохранять указанное c количество строк. В сочетании с group_by () вы можете, например, сохранить 2 наблюдения на группу:

mtcars %>% 
  select(vs, drat) %>% 
  group_by(vs) %>% 
  sample_n(2)

# A tibble: 4 x 2
# Groups:   vs [2]
     vs  drat
  <dbl> <dbl>
1     0  3.07
2     0  3.9 
3     1  4.22
4     1  3.08

Вопрос : есть ли простой способ выбрать другое количество наблюдений на группу? Например, если я хочу оставить 2 наблюдения для первой группы и 3 для второй. Если я передаю вектор функции sample_n () , она использует только первое значение (результат такой же, как указано выше).

mtcars %>% 
  select(vs, drat) %>% 
  group_by(vs) %>% 
  sample_n(c(2,3))

Заранее спасибо.

1 Ответ

2 голосов
/ 13 января 2020

создайте список-столбцы каждой группы с помощью group_nest (), добавьте столбец с количеством сэмплов, которое вы хотите в каждой группе, затем сопоставьте эти два столбца с функцией sample_n ():

library(tidyverse)



mtcars %>% 
  select(vs, drat) %>% 
  group_nest(vs, keep= TRUE)  %>%
  add_column(mysamples = c(2,3)) %>% 
  mutate(sampled  = map2(data , mysamples, ~ sample_n(.x, .y))) %>%
  .$sampled %>%
  bind_rows()


# A tibble: 5 x 2
     vs  drat
  <dbl> <dbl>
1     0  3.15
2     0  4.22
3     1  3.7 
4     1  4.93
5     1  3.08
> 
...