2015-04-06 61 views
2

我有R中的以下数据帧,有三个变量:R数据帧,与更换采样而controling两个变量

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做这样的事情。

在此先感谢。

回答

2

我无法找到您想要的任何特定功能。但它会给你想要的结果。的“重复”,如果功能相结合,起到同样的作用,而循环,和其他行的意思做的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),] 
} 
+0

谢谢。只是一件事:我认为'替换'应该= TRUE和'size'= 10来完美地回答上面的问题。 – AliCivil 2015-04-06 08:57:12

+0

如果将'size = 4,replace = FALSE'更改为'size = 10,replace = TRUE',则可以得到结果为10行,平均(频率)= 4.5,平均(男性)= 0.5。 – asbebe 2015-04-07 00:21:40

+0

我刚刚测试了100K记录的数据集上的代码,但它不起作用。似乎循环解决方案仅适用于少量记录,并且当我们有例如100K记录时不能解决问题。有什么想法吗? – AliCivil 2015-04-19 14:35:38