R中具有多个概率的随机样本

vdB*_*urg 1 r sample sampling

我需要从列表中取出一个主题样本,将它们分配为一个必须具有相似变量组成的研究的对照组.我试图在R中使用示例函数执行此操作,但我不知道如何为每个变量指定不同的概率.假设我有一个包含以下标题的表:

ID名称活动性别

我需要10个主题的样本,其中包含以下Campaign活动属性:

D2D - > 25%

F2F - > 38%

TM - > 17%

WW - > 21%

这意味着从我的数据集中,我有25%的受试者来自门到门运动(D2D),38%受试者来自面对面运动(F2F)等

性别构成如下:

男性 - > 54%

女性 - > 46%

当我得到10个受试者的随机样本时,我需要它具有相似的成分.

我一直在寻找几个小时,而我能得到的最接近的是这个答案:在R中获取数据样本, 但我需要分配多个概率.

我相信这可以帮助任何想要从数据集中获取代表性样本的人.

Jea*_*ams 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, ]
Run Code Online (Sandbox Code Playgroud)