r-循环通过列并使用调查包中的调查权重打印表格



我正在尝试循环遍历数据集的列并创建比例表。调查包在变量之前需要一个"~",这使得在列之间循环变得很困难。

数据和设计:

library(survey)
dat <- data.frame(id=c(1,2,3), weight=c(0,2,0.1), var1=c(2,3,5), var2=c(2,6,7))
design <- svydesign(id=~1, weights=~weight, data=dat)

尝试:

cols <- c("var1", "var2") # columns to loop through
for(i in seq_along(cols)) {
prop.table(svytable(~i, design))
}

我收到以下错误消息:

Error in model.frame.default(formula = weights ~ i, data = model.frame(design)) : variable lengths differ (found for 'i')

谢谢

从Ben的上述评论中认识到bquote在表达式中的部分替换,您可以如下修改for loop

cols <- c("var1", "var2") # columns to loop through
for(i in  seq_along(cols)){
print(prop.table(svytable(bquote(~.(as.name(cols[i]))), design)))
} 
# var1
#          2          3          5 
# 0.00000000 0.95238095 0.04761905 
# var2
#          2          6          7 
# 0.00000000 0.95238095 0.04761905 

数据

library(survey)
dat <- data.frame(id=c(1,2,3), weight=c(0,2,0.1), var1=c(2,3,5), var2=c(2,6,7))
design <- svydesign(id=~1, weights=~weight, data=dat)

最新更新