我有一个大型数据集,其字段包含组合的FIPS代码和邮政编码,还有另一个数据集,其人口加权质心用于与某些邮政编码数据组合的块组。我想通过“ FIPS代码”对数据进行分层,然后为每行分配一个块组质心的坐标,其中质心的选择概率与其人口成正比。
我最初使用的是数据采样(1000行)和来自采样包的strata函数,效果很好。现在,我想对数据集中的每一行都执行此操作,但是我遇到了此错误:
Error in strata(popCenters2, stratanames = "FIPS", method = "systematic", :
not enough obervations in the stratum 1
我怀疑这是因为地层不使用替换并且我的数据集比质心数据集大得多。
这是我与应用于样品的strata函数一起使用的代码:
## Combined fields to match format of other data
popCenters2 <- within(popCenters2,
FIPS <- paste(stateFIPS,
countyFIPS,
zipcode,
sep = ""))
sample %>% group_by(FIPS) %>% count() -> sampleCounts
popCenters2[order(popCenters2$FIPS), ] -> popCenters2
sampleCounts[order(sampleCounts$FIPS), ] -> sampleCounts
st = strata(popCenters2, stratanames = "FIPS", method = "systematic", size =
sampleCounts$n, pik = popCenters2$contribPop)
stTable = getdata(popCenters2, st)
我的样本有5行,其“ FIPS”变量等于4200117325,这是与之对应的质心数据:
FIPS tract blkGroup latitude longitude contribPop
4200117325 030200 1 +40.000254 -077.137559 452
4200117325 030200 2 +39.959070 -077.160354 324
4200117325 030400 1 +39.915855 -077.406954 194
4200117325 030400 2 +39.923503 -077.298505 131
4200117325 030400 3 +39.878509 -077.307547 173
4200117325 030400 4 +39.873705 -077.360488 176
4200117325 030400 5 +39.880362 -077.412175 108
4200117325 030500 1 +39.926149 -077.227283 630
4200117325 030500 2 +39.921269 -077.260640 459
我的问题是,例如,如果我的实际数据集具有20条对应于4200117325的行,我该如何重现这种过程?我已经阅读了有关strata函数的文档以及其他一些文档(来自DescTools的Strata,调查包),但是无法找到任何可替换的东西。