遍历调查中的变量组-R

遍历调查中的变量组-R,r,list,iteration,survey,R,List,Iteration,Survey,如前所述,如果您想计算惊人的srvyr包中分类变量的比例,您首先必须将变量作为因子分组,然后使用空的srvyr::survey_mean,如本例所示 我的目标是迭代第二个变量cname和sch.wide,同时保留第一个分组变量stype,以避免重复代码 library(survey) library(srvyr) data(api) df <- apiclus1 %>% mutate(cname=as.factor(cname)) %>% select(pw,s

如前所述,如果您想计算惊人的srvyr包中分类变量的比例,您首先必须将变量作为因子分组,然后使用空的srvyr::survey_mean,如本例所示

我的目标是迭代第二个变量cnamesch.wide,同时保留第一个分组变量stype,以避免重复代码

library(survey)
library(srvyr)

data(api)

df <- apiclus1 %>% 
  mutate(cname=as.factor(cname)) %>% 
  select(pw,stype, cname,sch.wide) %>% 
  as_survey_design(weights=pw) 

# proportions of sch.wide
df %>% 
  group_by(stype,sch.wide) %>% 
  summarise(prop=srvyr::survey_mean())
#> # A tibble: 6 x 4
#>   stype sch.wide   prop prop_se
#>   <fct> <fct>     <dbl>   <dbl>
#> 1 E     No       0.0833  0.0231
#> 2 E     Yes      0.917   0.0231
#> 3 H     No       0.214   0.110 
#> 4 H     Yes      0.786   0.110 
#> 5 M     No       0.32    0.0936
#> 6 M     Yes      0.68    0.0936

# proportions of cname
df %>% 
  group_by(stype,cname) %>% 
  summarise(prop=srvyr::survey_mean())
#> # A tibble: 33 x 4
#>    stype cname          prop prop_se
#>    <fct> <fct>         <dbl>   <dbl>
#>  1 E     Alameda     0.0556  0.0191 
#>  2 E     Fresno      0.0139  0.00978
#>  3 E     Kern        0.00694 0.00694
#>  4 E     Los Angeles 0.0833  0.0231 
#>  5 E     Mendocino   0.0139  0.00978
#>  6 E     Merced      0.0139  0.00978
#>  7 E     Orange      0.0903  0.0239 
#>  8 E     Plumas      0.0278  0.0137 
#>  9 E     San Diego   0.347   0.0398 
#> 10 E     San Joaquin 0.208   0.0339 
#> # ... with 23 more rows
Created on 2019-11-28 by the reprex package (v0.3.0)
图书馆(调查)
图书馆(srvyr)
数据(api)
df%
变异(cname=as.factor(cname))%>%
选择(pw、stype、cname、sch.wide)%>%
as_测量_设计(重量=pw)
#学校范围内的比例
df%>%
分组依据(stype,学校范围)%>%
总结(prop=srvyr::survey_mean())
#>#tibble:6 x 4
#>stype sch.宽支柱
#>            
#>1 E编号0.0833 0.0231
#>2 E是0.917 0.0231
#>3小时0.214 0.110
#>4小时是0.786 0.110
#>5米0.32 0.0936
#>6米是0.68 0.0936
#cname的比例
df%>%
分组人(stype,cname)%>%
总结(prop=srvyr::survey_mean())
#>#A tibble:33 x 4
#>stype cname道具
#>                 
#>1 E阿拉米达0.0556 0.0191
#>2 E弗雷斯诺0.0139 0.00978
#>3 E克恩0.00694 0.00694
#>洛杉矶东部4 0.0833 0.0231
#>5 E门多西诺0.0139 0.00978
#>6 E Merced 0.0139 0.00978
#>7 E橙色0.0903 0.0239
#>8 E羽流0.0278 0.0137
#>9东圣地亚哥0.347 0.0398
#>10东圣华金0.208 0.0339
#> # ... 还有23行
由reprex软件包(v0.3.0)于2019年11月28日创建
也许这里的方法是创建列表,保留第一个分组变量,将数据除以另一组变量,然后计算比例

我想找到一个涉及purrr:maptidyverse的解决方案


提前感谢您的帮助,或指向答案

有多种方法。如果我们作为字符串传递,一个选项是使用
group\u by\u at
,它将字符串作为参数

library(purrr)
library(dplyr)
library(survey)
library(srvyr)
map(c('sch.wide', 'cname'), ~
        df %>%
           group_by_at(vars("stype", .x)) %>%
           summarise(prop = srvyr::survey_mean()))
#[[1]]
# A tibble: 6 x 4
#  stype sch.wide   prop prop_se
#  <fct> <fct>     <dbl>   <dbl>
#1 E     No       0.0833  0.0231
#2 E     Yes      0.917   0.0231
#3 H     No       0.214   0.110 
#4 H     Yes      0.786   0.110 
#5 M     No       0.32    0.0936
#6 M     Yes      0.68    0.0936

#[[2]]
# A tibble: 30 x 4
#   stype cname          prop prop_se
#   <fct> <fct>         <dbl>   <dbl>
# 1 E     Alameda     0.0556  0.0191 
# 2 E     Fresno      0.0139  0.00978
# 3 E     Kern        0.00694 0.00694
# 4 E     Los Angeles 0.0833  0.0231 
# 5 E     Mendocino   0.0139  0.00978
# 6 E     Merced      0.0139  0.00978
# 7 E     Orange      0.0903  0.0239 
# 8 E     Plumas      0.0278  0.0137 
# 9 E     San Diego   0.347   0.0398 
#10 E     San Joaquin 0.208   0.0339 
# … with 20 more rows
map(quos(sch.wide, cname), ~  
        df %>%
          group_by(stype, !!.x) %>% 
          summarise(prop = srvyr::survey_mean()))