我正在使用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中无法实现。