对于示例数据框:
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)
...但我不确定如何将结果合并到我的摘要数据表中。
非常感谢提前。
答案 0 :(得分:1)
也许您可以使用weighted.mean
功能
variable.table_1 <- setDT(df)[,.(.N, result = weighted.mean((PoorHealth==1),
w = weight)*100), by = region.1]
在您的示例中,您也可以简单地使用mean
代替sum
与/.N
组合使用。