我需要从列表中取出一个主题样本,将它们分配为一个必须具有相似变量组成的研究的对照组。我试图在R中使用示例函数执行此操作,但我不知道如何为每个变量指定不同的概率。 假设我有一个包含以下标题的表:
ID名称广告系列性别
我需要10个主题的样本,其中包含以下Campaign活动属性:
D2D - > 25%
F2F - > 38%
TM - > 17%
WW - > 21%
这意味着从我的数据集中,我有25%的受试者来自门到门运动(D2D),38%来自面对面运动(F2F),等等
性别构成如下:
男性 - > 54%
女性 - > 46%
当我得到10个受试者的随机样本时,我需要它具有相似的成分。
我一直在寻找几个小时,而我能得到的最接近的是这个答案:taking data sample in R 但我需要分配多个概率。
我确信这可以帮助任何想要从数据集中获取代表性样本的人。
答案 0 :(得分:6)
听起来你有兴趣采用随机分层样本。您可以使用stratsample()
包中的survey
函数执行此操作。
在下面的例子中,我创建了一些假数据来模仿你拥有的东西,然后我定义了一个函数来采用随机比例分层随机样本,然后我将该函数应用于假数据。
# example data
ndf <- 1000
df <- data.frame(ID=sample(ndf), Name=sample(ndf),
Campaign=sample(c("D2D", "F2F", "TM", "WW"), ndf, prob=c(0.25, 0.38, 0.17, 0.21), replace=TRUE),
Gender=sample(c("Male", "Female"), ndf, prob=c(0.54, 0.46), replace=TRUE))
# function to take a random proportional stratified sample of size n
rpss <- function(stratum, n) {
props <- table(stratum)/length(stratum)
nstrat <- as.vector(round(n*props))
nstrat[nstrat==0] <- 1
names(nstrat) <- names(props)
stratsample(stratum, nstrat)
}
# take a random proportional stratified sample of size 10
selrows <- rpss(stratum=interaction(df$Campaign, df$Gender, drop=TRUE), n=10)
df[selrows, ]