具有三个或更多变量的加权交叉制表的列百分比

时间:2017-12-19 17:23:44

标签: r stata crosstab survey

我正在使用survey包的svytable和prop.table来生成调查数据的加权交叉制表,行和列百分比。这适用于两个变量,但是,如果我想为三个或更多变量生成行和列百分比,我无法使其工作。这是一个可重现的例子。

library(survey)    
df <- data.frame(col1 = round(rnorm(20, 10, 1), 0), col2 = rnorm(20, 5, 1), col3 = round(rnorm(20,7,1),0), w = rnorm(20, 1, .2))
df.w <- svydesign(id = ~1, data = df, weights = ~w)

我可以获得两个变量的行和列百分比,这里是col1-col2:

prop.table(svytable(~col1+col2),2)

然而,这不起作用:

prop.table(svytable(~col1+col2+col3, df.w),2)

修改 我设法以这种方式修复它:

c7 <- subset(df, col3 == 7)
c7.w <- svydesign(~col1+col2, c7) %>% prop.table(2)

这当然不太理想。如果有人能有更好的主意,我会很高兴的。但是在Stata中要容易得多。

在Stata中,我会以这种方式使用:bysort col3: tab col1 col2, col nofreq

我认为我需要一种方法来按照col3的类别对df.w进行子集化或过滤。虽然可以在df中执行此操作,但在df.w中无法实现。

0 个答案:

没有答案