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

时间:2013-06-08 17:35:24

标签: r sample sampling

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

  

ID名称广告系列性别

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

  

D2D - > 25%

     

F2F - > 38%

     

TM - > 17%

     

WW - > 21%

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

性别构成如下:

  

男性 - > 54%

     

女性 - > 46%

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

我一直在寻找几个小时,而我能得到的最接近的是这个答案:taking data sample in R 但我需要分配多个概率。

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

1 个答案:

答案 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, ]