R数据帧,在替换的同时控制两个变量

时间:2015-04-06 07:39:59

标签: r sample random-sample

我在R中有以下数据框,有三个变量:

id<-c(1,2,3,4,5,6,7,8,9,10)
frequency<-c(1,2,3,4,5,6,7,8,9,10)
male<-c(1,0,1,0,1,0,1,0,1,0)
df<-data.frame(id,frequency,male)

对于df平均值frequency为5.5,50%的观察结果为male。现在我想从df取代一个随机样本并使用相同的大小,而新样本的平均值frequency为4,male的比例保持不变。 我想知道在R中是否有办法做这样的事情。

提前致谢。

1 个答案:

答案 0 :(得分:2)

我无法找到你想要的任何特定功能。但它会给你想要的结果。 'repeat'和if函数的组合起到与while循环相同的作用,而其他行表示抽样大小为4.

repeat
{
    df.sample = df[sample(nrow(df),size=4,replace=FALSE),]
    if(mean(df.sample$frequency) == 4.5 & mean(df.sample$male) == 0.5){
        break
    }
}

结果是

> df.sample
  id frequency male
   4  4         4    0
   2  2         2    0
   9  9         9    1
   3  3         3    1

对于while循环,

while(!(mean(df.sample$frequency) == 4.5 & mean(df.sample$male) == 0.5)){
    df.sample = df[sample(nrow(df),size=4,replace=FALSE),]
}