Выбор n случайных групп из сгруппированных данных в R - PullRequest
0 голосов
/ 22 февраля 2020

Я сгруппировал данные, составленные из учеников, сгруппированных в 160 школах. Я хотел бы взять случайную выборку из 30 школ из этого набора данных. Я жестко запрограммировал решение (см. Ниже), но есть ли функция-обертка или более быстрый способ сделать это в R? Вроде как sample_n () или top_n (), но они возвращают n наблюдений на группу, тогда как я хочу 100% наблюдений от n групп.

# First, some example data. Each row represents one student in a given school, and that student's favourite fruit.

df <- tribble(
    ~school_id, ~favourite_fruit,
    #----------#---------------
    1, "apple",
    1, "banana",
    2, "kiwi",
    2, "tomato",
    3, "strawberry",
    3, "cherry",
    4, "orange",
    4, "lime"
)

# My hard-coded solution

school_vector <- df %>% 
    group_by(school_id) %>% 
    select(school_id) %>% 
    count() %>% 
    ungroup() %>% 
    select(school_id) %>% 
    sample_n(2)

df_subset <- df %>% 
    filter(school_id %in% school_vector$school_id) %>% 
    as_tibble()

1 Ответ

3 голосов
/ 22 февраля 2020

Вы можете создать образец school_id с в filter и использовать его с текущими %in% logi c

df %>% 
  filter(school_id %in% sample(unique(school_id), 2))
# # A tibble: 4 x 2
#   school_id favourite_fruit
#       <dbl> <chr>          
# 1         3 strawberry     
# 2         3 cherry         
# 3         4 orange         
# 4         4 lime   

Как функция:

group_samp <- function(df, group_var, n){
  df %>% 
    filter({{group_var}} %in% sample(unique({{group_var}}), n))
}

df %>% 
  group_samp(school_id, 2)
# # A tibble: 4 x 2
#   school_id favourite_fruit
#       <dbl> <chr>          
# 1         1 apple          
# 2         1 banana         
# 3         2 kiwi           
# 4         2 tomato         
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...