R 查找加权频率&;se';变量向量的s

R 查找加权频率&;se';变量向量的s,r,dplyr,survey,R,Dplyr,Survey,我想找到数据中所有变量的加权频率及其SE df <- data.frame(sex = c('F', 'M', 'F', 'M', 'M', 'M', 'F', 'F'), married = c(1,1,1,1,0,0,1,1), pens = c(0, 1, 1, 1, 1, 1, 0, 0), weight = c(1.12, 0.55, 1.1, 0.6, 0.23, 0.23,

我想找到数据中所有变量的加权频率及其SE

df <- data.frame(sex = c('F', 'M', 'F', 'M', 'M', 'M', 'F', 'F'),
                 married = c(1,1,1,1,0,0,1,1),
                 pens = c(0, 1, 1, 1, 1, 1, 0, 0),
                 weight = c(1.12, 0.55, 1.1, 0.6, 0.23, 0.23, 0.66, 0.67))

design <- svydesign(ids=~1, data=df, weights=~weight)
我的实际数据集很大,我想同时在所有变量上运行它。

vars <- c("sex","married","pens")
for(i in  seq_along(vars)){
    print(prop.table(svytable(bquote(~.(as.name(vars[i]))), design)))
 }
我也可以这样做——但是运行svytable对我没有帮助,因为我需要SE。

vars <- c("sex","married","pens")
for(i in  seq_along(vars)){
    print(prop.table(svytable(bquote(~.(as.name(vars[i]))), design)))
 }
编辑 我想对df中的每个变量分别运行svymean(~interaction(var),design)。因此,不必像这样运行多次:

svymean(~interaction(married), design)
svymean(~interaction(sex), design)
svymean(~interaction(pen), design)
我希望能够为我的向量化名称列表(vars)中的每个变量循环执行此命令


有什么建议吗

我们可以使用
粘贴
来创建公式

out1 <- svymean(as.formula(paste0('~interaction(', toString(vars), ')')), design)

out1
#                                         mean     SE
#interaction(sex, married, pens)F.0.0 0.000000 0.0000
#interaction(sex, married, pens)M.0.0 0.000000 0.0000
#interaction(sex, married, pens)F.1.0 0.474806 0.2109
#interaction(sex, married, pens)M.1.0 0.000000 0.0000
#interaction(sex, married, pens)F.0.1 0.000000 0.0000
#interaction(sex, married, pens)M.0.1 0.089147 0.0717
#interaction(sex, married, pens)F.1.1 0.213178 0.1945
#interaction(sex, married, pens)M.1.1 0.222868 0.1567

非常感谢。这对于一个小数据集来说非常有效,但是这个命令已经运行了大约10分钟,没有结果,我的df有200个变量和2000个观测值。@有200个变量的新手,交互,这将是很多组合感谢你指出这一点——我在我的帖子中犯了一个错误,将纠正它,我想分别在每个变量上运行Svyman,而不是作为一个单独的向量相互组合运行。@NewBee抱歉,我以为你想在所有变量上进行交互,这就是它有一个issue@NewBee您可以执行
lappy(vars,function(x){svmean
out2 <- svymean(~interaction(sex,married, pens), design)
identical(out1, out2)
#[1] TRUE
outlst1 <- lapply(vars, function(x) 
    svymean(as.formula(paste0('~interaction(', x, ')')), design))

outlst1
#[[1]]
#                     mean     SE
#interaction(sex)F 0.68798 0.1721
#interaction(sex)M 0.31202 0.1721

#[[2]]
#                          mean     SE
#interaction(married)0 0.089147 0.0717
#interaction(married)1 0.910853 0.0717

#[[3]]
#                      mean     SE
#interaction(pens)0 0.47481 0.2109
#interaction(pens)1 0.52519 0.2109