我正在使用一个功能来对一些调查数据进行后分层,但是我在某些范围界定问题上陷入了困境。我的数据在列表中,我无法弄清楚如何访问和使用函数中的因子变量级别。在函数之外,“ levels(data $ variables $ group)”可以正常工作。但是,在函数内部,一切都会陷入困境。有关如何提取要在crossing命令中使用的级别的任何帮助?
我已经看过“用dplyr编程”小插图,并尝试根据该教程中的示例使用多种方法来引用/取消引用字符串“ testdesign $ variables $ sex”。我得到的结果为NULL或错误。 我知道我没有正确理解quosure概念,但是我已经成功完成了其他未在列表上运行的功能。
library(srvyr)
library(survey)
library(tidyverse)
test <- data.frame(
age3group = sample(letters[1:3], 30, replace = T),
sex = sample(c("Male", "Female"), 15, replace=T),
seqno = sample(1:30),
denst = sample(c("Strata1", "Strata2", "Strata3"), replace=T),
wts = runif(30, 1.0, 5.0)
)
testdesign<- test %>%
as_survey_design(ids=seqno, strata=denst, nest=T, weights=wts, probs=NULL)
popage<-c(10.48, 13.48, 9.68)
#2. Make a function that takes a svydesign object and postStratifies it
stratPost <- function(design, agegrp=age3grp, agepop=popage, group){
quo_group <-enquo(group)
quo_age <- enquo(agegrp)
quo_design <- enquo(design)
#create formulas to reference the group and age variables
my_formula1<-as.formula(paste0("~", quo_name(quo_group)))
my_formula2<-as.formula(paste0("~", quo_name(quo_age)))
#create table of frequencies of grouping variable
grptable<-as.data.frame(svytable(my_formula1, design))
groupformula<-paste0(quo_name(quo_design), "$", "variables", "$", quo_name(quo_group))
#groupform<-enquo(groupform)
lev <- enquo(groupformula)
grouplevels<-levels(!! lev)
print(grouplevels)
}
stratPost(design=testdesign, group=sex)
在此功能中,我还尝试过:
grouplevels<-levels(as.name(groupformula))
grouplevels<-levels(quo_name(groupformula))
etc.