Group_by перебирает различные переменные в объекте данных опроса

Вот мои данные:

library(tidyverse)
library(srvyr)

x  <- structure(list(weight_. = c(0.533483250400349, 0.501519621255761, 
                            0.377142269444863, 0.353321846438303, 0.541351935749236, 0.377142269444863, 
                            0.848202098220559, 0.466419776588491, 0.848202098220559, 0.507159979159623), 
                     region = structure(c(3L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L), .Label = c("м. Київ", "Північний", "Центральний"), class = "factor"), 
age = structure(c(2L, 1L, 2L, 2L, 3L, 2L, 4L, 3L, 4L, 3L), .Label = c("18-24", "25-34", "35-44", "45+"), class = "factor"), 
gender = structure(c(2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 1L), .Label = c("мужчина", "женщина"), class = "factor")), row.names = c(NA, 10L), class = "data.frame")

Я хочу зациклить group_by по разным столбцам (в этом примере это «регион»)

x %>%
  as_survey(weights = c(weight_.)) %>%
  group_by(region) %>%
  summarize(n = survey_total(na.rm=T), m =survey_mean(na.rm=T))

В результате я хочу иметь список с таблицами, как показано ниже, с сгруппированной сводкой для каждого выбранного столбца.

A tibble: 3 x 5
  region          n  n_se      m  m_se
  <fct>       <dbl> <dbl>  <dbl> <dbl>
1 м. Київ     3.96  1.01  0.740  0.144
2 Північний   0.860 0.585 0.161  0.115
3 Центральний 0.533 0.533 0.0996 0.100 

person Val_hat    schedule 09.06.2020    source источник
comment
Привет, добро пожаловать в SO. Без набора тестовых данных очень сложно помочь. Вы можете использовать функцию dput, чтобы поделиться с нами частью ваших данных, чтобы мы могли провести с ними несколько тестов и воспроизвести ошибку. Кроме того, вы можете поделиться ожидаемым результатом, чтобы мы могли попытаться его достичь. (примечание: используйте @, чтобы ответить на комментарий, иначе людей не заметят)   -  person Dan Chaltiel    schedule 12.06.2020
comment
@DanChaltiel Спасибо! Я обновлю свой вопрос, чтобы через несколько секунд он стал более воспроизводимым.   -  person Val_hat    schedule 16.06.2020


Ответы (1)


group_by_ здесь составлял бы список тиблей из вектора региона / пола

myfun <-
    function( this_variable ){
        x %>%
          as_survey(weights = c(weight_.)) %>%
          group_by_(this_variable) %>%
          summarize(n = survey_total(na.rm=T), m =survey_mean(na.rm=T))
    }

lapply( c( 'region' , 'gender' ) , myfun )
person Anthony Damico    schedule 16.06.2020