我想将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”来实现。
答案 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 )