2014-09-29 96 views
0

比例取樣我有生成的數據集如下:分層抽樣或R中

myData <- data.frame(a=1:N,b=round(rnorm(N),2),group=round(rnorm(N,4),0)) 

的數據看起來像,因爲這

enter image description here

我想生成分層樣本集的myData與給定的樣本大小,即50.所得到的樣本集應按照「組」的比例分配原始數據集。舉例來說,假設myData有20條記錄屬於組4,然後將得到的數據集應該有50*20/200=5記錄屬於組4,如何做,在河

回答

1

您可以使用my stratified function,指定值< 1爲您比例如下:

## Sample data. Seed for reproducibility 
set.seed(1) 
N <- 50 
myData <- data.frame(a=1:N,b=round(rnorm(N),2),group=round(rnorm(N,4),0)) 

## Taking the sample 
out <- stratified(myData, "group", .3) 
out 
#  a  b group 
# 17 17 -0.02  2 
# 8 8 0.74  3 
# 25 25 0.62  3 
# 49 49 -0.11  3 
# 4 4 1.60  3 
# 26 26 -0.06  4 
# 27 27 -0.16  4 
# 7 7 0.49  4 
# 12 12 0.39  4 
# 40 40 0.76  4 
# 32 32 -0.10  4 
# 9 9 0.58  5 
# 42 42 -0.25  5 
# 43 43 0.70  5 
# 37 37 -0.39  5 
# 11 11 1.51  6 

將最終組中的計數與我們所預期的相比較。

round(table(myData$group) * .3) 
# 
# 2 3 4 5 6 
# 1 4 6 4 1 
table(out$group) 
# 
# 2 3 4 5 6 
# 1 4 6 4 1 

您也可以輕鬆取樣品固定數量的每個組,就像這樣:

stratified(myData, "group", 2) 
#  a  b group 
# 34 34 -0.05  2 
# 17 17 -0.02  2 
# 49 49 -0.11  3 
# 22 22 0.78  3 
# 12 12 0.39  4 
# 7 7 0.49  4 
# 18 18 0.94  5 
# 33 33 0.39  5 
# 45 45 -0.69  6 
# 11 11 1.51  6 
+0

阿難,感謝您的回覆。我有一個關於你的代碼溫度<一個問題 - lapply( 名(df.split), 函數(x)的df.split [[X]] [樣品(df.table [X], N [X],更換= replace),])看起來你正在做替換抽樣。這可能會導致重複樣本。是對的嗎? – user288609 2014-09-30 02:39:21

+0

@ user288609,有什麼問題? :-)到那時爲止的所有代碼都是確定每層的樣本大小。這是抽樣實際發生的階段。它循環遍歷一個已按組拆分的「data.frame」,並從每個子集中對所需的行數進行採樣。 – A5C1D2H2I1M1N2O1R2T1 2014-09-30 02:44:18

+0

@ user288609,no。除非在調用函數時使用'replace = TRUE'。 (對不起,當我開始撰寫我的評論時,你的問題不存在) – A5C1D2H2I1M1N2O1R2T1 2014-09-30 02:44:49