如何将“ svyrep.design”’转换为data.frame?

时间:2019-04-08 19:13:39

标签: r dataframe survey

我想将R中的svyrep.design / survey.design对象转换为数据框。我知道这个对象会很大。

library(survey)
data(api)   # loads "apiclus2" sample data
dclus2 <- svydesign(id=~dnum+snum, weights=~pw, data=apiclus2)

上面的方法对数据框赋予权重,将其变成调查对象。

dclus2  =  as.data.frame(dclus2)

错误消息:

# Error in as.data.frame.default(dclus2) : 
# cannot coerce class ‘c("survey.design2", "survey.design")’ to a data.frame`

我想将其重新变成数据帧,并将权重应用于对象。但是正如您在上面看到的那样,不可能通过“ as.data.frame”来实现。

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找做这样的事情?您的示例的权重中有小数点,但您不能有一半的记录。在最终结果x data.frame中,记录数等于原始调查data.frame中四舍五入后的权重之和。当您进行转换时,最终数据集将无法用于不确定性的估算

library(survey)
data(api)
apiclus2$rounded_weights <- round( apiclus2$pw )
x <- apiclus2[ unlist( mapply( rep , seq( nrow( apiclus2 ) ) , apiclus2$rounded_weights ) ) , ]
sum( apiclus2$rounded_weights ) == nrow( x )