如何使用“采样”包在R中创建分层样本?我的数据集有355,000个观测值。该代码可以正常工作到最后一行。下面是我编写的代码,但是我总是收到以下消息:“sort.list(y)中的错误:'x'必须是'sort.list'的原子。您在列表上调用过'sort'吗?”

请不要将我指向Stackoverflow上的旧消息。我研究了它们,但无法使用它们。谢谢你。

## lpdata file has 355,000 observations
# Exclude Puerto Rico, Virgin Islands and Guam
sub.lpdata<-subset(lpdata,"STATE" != 'PR' | "STATE" != 'VI' | "STATE" != 'GU')

## Create a 10% sample, stratified by STATE
sort.lpdata<-sub.lpdata[order(sub.lpdata$STATE),]
tab.state<-data.frame(table(sort.lpdata$STATE))
size.strata<-as.vector(round(ceiling(tab.state$Freq)*0.1))

s<-strata(sort.lpdata,stratanames=sort.lpdata$STATE,size=size.strata,method="srswor")}

最佳答案

在不了解Strata函数的情况下,可能需要一些编码才能做到:

d <- expand.grid(id = 1:35000, stratum = letters[1:10])

p = 0.1

dsample <- data.frame()

system.time(
for(i in levels(d$stratum)) {
  dsub <- subset(d, d$stratum == i)
  B = ceiling(nrow(dsub) * p)
  dsub <- dsub[sample(1:nrow(dsub), B), ]
  dsample <- rbind(dsample, dsub)
  }
)

# size per stratum in resulting df is 10 % of original size:
table(dsample$stratum)

HTH,
y

ps:我的笔记本电脑上的CPU时间为0.09!

09-25 21:37