【问题标题】:Using Rs data.table on (weighted) survey data [duplicate]在(加权)调查数据上使用 Rs data.table [重复]
【发布时间】:2016-02-02 20:49:41
【问题描述】:

对于示例数据框:

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]

但是,我的原始数据来自一项调查,因此我将设计权重和总体权重相乘(按照调查的指导,并将此变量称为“权重”)。

如何在 variable.table_1 中应用我的“结果”变量的适当权重?

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

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

...但我不确定如何将结果合并到汇总数据表中。

非常感谢。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    或许你可以使用weighted.mean函数

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

    在您的示例中,您也可以简单地使用 mean 而不是 sum/.N 结合使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 2019-11-16
      • 1970-01-01
      • 2015-11-07
      • 2013-08-24
      • 1970-01-01
      相关资源
      最近更新 更多