0

我有一个来自调查的大型数据集。我已经有一个列/变量,它是一个应该应用于整个数据集的权重。这可以通过 SPSS 简单地实现,但我也想在 R 中做到这一点。我已经知道如何将加权变量应用于单个列,如下所示:

gend <- wtd.table(master.data$Q10_GENDER, weights = master.data$Weight_Age_Gender_Income)

这对一个变量很有用,但我不想对我运行的每一个命令都这样做。有没有办法适用于整个数据集?

我将外部数据库的一个较大子集缩减为一个简单的三变量 DF,并且我想将一个预先计算的权重变量应用于整个 DF。

test <- data.frame(br$Q10_GENDER, 
               br$Q5B_URBANICITY, 
               br$S4_AGE_GROUP_1)

br$Weight_Age_Gender_Income

总结输出:

     br.Q10_GENDER                br.Q5B_URBANICITY br.S4_AGE_GROUP_1
 Female:4986   Urban, city center      :8791    18-24  :3048     
 Male  :4893   Suburbs surrounding city: 827    25-29  :1664     
 Other :  44   Rural                   : 305    30-34  :1218     
                                                35-39  : 954     
                                                40-44  : 806     
                                                13-17  : 763     
                                                (Other):1470 
4

2 回答 2

0

您可以使用该survey软件包

library(survey)

my_design <-svydesign(id=~1, weights=~Weight_Age_Gender_Income, data=master.data.table)

svytable(~gender, design=my_design, na.rm=TRUE)
svytable(~urbanicity, design=my_design, na.rm=TRUE)

## two-way table
svytable(~+gender+urbanicity, design=my_design, na.rm=TRUE)

如果您想要准确的标准误差,您还需要向svydesign(). SPSS 不需要这个,但它也没有给出准确的标准误差。

survey软件包还具有一系列用于加权调查数据的回归模型和图形

于 2020-05-26T23:21:27.143 回答
0

这可能是一个很长的镜头,不清楚您的数据是什么样的。

library(dplyr)

set.seed(123)

df <- data.frame(v1 = runif(4),
              v2 = c(1, 2, 2, 1),
              v3 = 1:4,
              wgt = c(0.1, 0.5, 1, 2))


df %>% mutate_at(vars(v1:v3), function(x) .$wgt * x)

于 2020-04-15T10:23:28.193 回答