r加权复杂表格 - 表格

时间:2018-02-23 17:28:56

标签: r weighting

我使用"表"创建了一系列表格。 R中的包,以允许多个变量,例如

##create sample data frame
x<-runif(1000, 0, 1)
x<-round(x,0)
y<-runif(1000, 0, 1)
y<-round(y,0)
z<-runif(1000, 1, 6)
z<-round(z, 0)
data<-as.data.frame(cbind(x,y,z))
names(data)<-c("Q1_1", "gender", "agegrp")
data$Q1_1<-as.factor(data$Q1_1)
data$weights<-runif(1000, 0, 0.5) 
##create table   
tabular((Q1_1+1)~((factor(agegrp)+factor(gender))*Percent("row")), data=data)

这很好(并允许添加更多变量,我需要),但我想使用加权数据生成相同的表。 &#34;调查&#34; package给了我svytable选项,但这仅限于生成两个变量的crosstables,而不是将一个或多个变量与一系列其他变量相交。在表格中,我可以产生加权平均值,但是看不到加权百分比的方法。另一种方法是创建几个加权表,在这里我可以创建一个变量列表来与另一个进行交叉,然后将它们绑定,但这似乎有点低效?

有没有人知道使用tabular命令创建这样一个表的方法,还是我最好找另一种方法来创建适合加权的表?

1 个答案:

答案 0 :(得分:0)

Percent的默认结果是function(x, y) 100*length(x)/length(y),其中x是当前单元格中的值,y是参考单元格中的值,即整体样本表中的行。

要获得加权百分比,您希望函数使用权重之和而不是向量的长度,如包中?Percent中的讨论所示。这很简单,只需使用

tabular((Q1_1 + 1) ~ ((factor(agegrp) + factor(gender)) *
                      Percent("row", 
                        fn = function(x, y) 100*sum(x)/sum(y)) *
                      weights), 
        data = data)