2015-04-06 29 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