在(加权)调查数据上使用Rs data.table

时间:2016-02-02 12:43:25

标签: r data.table

对于示例数据框:

df <- structure(list(id = 1:25, region.1 = structure(c(1L, 1L, 1L, 
                                                        1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 
                                                        4L, 4L, 4L, 4L, 4L, 4L), .Label = c("AT1", "AT2", "AT3", "AT4"
                                                        ), class = "factor"), gndr = c(0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 
                                                                                       1L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 
                                                                                       1L), PoorHealth = c(0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 
                                                                                                           0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 1L), weight = c(0.3, 
                                                                                                                                                                               1.6, 2.5, 3.5, 0.2, 0.2, 0.2, 0.6, 0.15, 0.25, 1.36, 1, 1, 1, 
                                                                                                                                                                               0.1, 0.2, 0.3, 0.3, 0.3, 0.4, 0.3, 1, 1.4, 1.3, 0.4)), .Names = c("id", 
                                                                                                                                                                                                                                                 "region.1", "gndr", "PoorHealth", "weight"), class = c("data.table", 
                                                                                                                                                                                                                                                                                                        "data.frame"), row.names = c(NA, -25L))

我希望使用代码

创建一个摘要数据表(使用data.table)
variable.table_1 <- setDT(df)[,.(.N,result=sum((PoorHealth==1)/.N)*100),
                             by=region.1]

然而,我的原始数据来自一项调查,因此我有一个设计和人口权重,我已经成倍增加(遵循调查的指导,并称这个变量&#39;重量&#39;)。

如何对我的结果进行适当的加权&#39;变量在变量.table_1?

也许我必须使用调查包?看here似乎在调整我必须先通过调查包运行我的数据框...

library(survey)
df.w <- svydesign(id = ~1, data = df, weights = df$weight)

...但我不确定如何将结果合并到我的摘要数据表中。

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

也许您可以使用weighted.mean功能

variable.table_1 <- setDT(df)[,.(.N, result = weighted.mean((PoorHealth==1),
                       w = weight)*100), by = region.1]

在您的示例中,您也可以简单地使用mean代替sum/.N组合使用。