遍历列并根据调查包的条件打印比例或平均值 table
Looping through columns and printing proportion or mean table based on condition with survey package
我正在尝试遍历列并在满足条件时打印比例 table,或者在不满足条件时打印平均值 table。
数据
library(survey)
dat <- data.frame(id=c(1,2,3), weight=c(0,2,0.1), var1=c(2,3,4), var2=c(2,6,7))
design <- svydesign(id=~1, weights=~weight, data=dat)
cols <- c("var1", "var2")
type <- c("prop", "mean")
我试过:
for(i in seq_along(cols)){
ifelse(type[i]=="prop",
print(prop.table(svytable(bquote(~.(as.name(cols[i]))), design))),
print(svymean(bquote(~.(as.name(cols[i]))), design))) }
我收到此错误消息:
Error in array(x, c(length(x), 1L), if (!is.null(names(x))) list(names(x), :
'data' must be of a vector type, was 'language'
我不太清楚为什么 bquote 会给你带来这么多问题,但如果我使用公式,它就可以正常工作:
for(i in seq_along(cols)){
FORMULA= as.formula(paste("~",cols[i]))
ifelse(type[i]=="prop",
print(prop.table(svytable(FORMULA, design))),
print(svymean(FORMULA, design))) }
var1
2 3 4
0.00000000 0.95238095 0.04761905
mean SE
var2 6.0476 0.0786
我正在尝试遍历列并在满足条件时打印比例 table,或者在不满足条件时打印平均值 table。
数据
library(survey)
dat <- data.frame(id=c(1,2,3), weight=c(0,2,0.1), var1=c(2,3,4), var2=c(2,6,7))
design <- svydesign(id=~1, weights=~weight, data=dat)
cols <- c("var1", "var2")
type <- c("prop", "mean")
我试过:
for(i in seq_along(cols)){
ifelse(type[i]=="prop",
print(prop.table(svytable(bquote(~.(as.name(cols[i]))), design))),
print(svymean(bquote(~.(as.name(cols[i]))), design))) }
我收到此错误消息:
Error in array(x, c(length(x), 1L), if (!is.null(names(x))) list(names(x), :
'data' must be of a vector type, was 'language'
我不太清楚为什么 bquote 会给你带来这么多问题,但如果我使用公式,它就可以正常工作:
for(i in seq_along(cols)){
FORMULA= as.formula(paste("~",cols[i]))
ifelse(type[i]=="prop",
print(prop.table(svytable(FORMULA, design))),
print(svymean(FORMULA, design))) }
var1
2 3 4
0.00000000 0.95238095 0.04761905
mean SE
var2 6.0476 0.0786