2016-12-15 8 views
0

基本機能を使用してコンテンツのバランシングを使用してサンプリングを実行しようとしています。しかし、グループ「a」または「b」のいずれかを持つ少なくとも1つの行が選択されるようにするにはどうすればよいでしょうか?コンテンツバランシングを使用したサンプリング

a <- cbind(matrix(1:36,ncol=3),rbind(as.matrix(rep('a',each=10)),as.matrix(rep('b', each=2)))) 

b <- 1:5 
for (i in b){ 
    draw <- sample(nrow(a),1) 
    a<- a[-draw,] #minus that row. 
    } 
a 

このアプローチを使用すると、「b」が得られることがあります。グループbの行が常に少なくとも1回は選択されていることを確認するにはどうすればよいですか?

+0

重層サンプリング:各サブサンプルを別々に選択して、いくつかのルール(例えば、90%グループaと10%グループb)に従って選択する。 – lmo

+0

そして、サンプリングパッケージ内の関数階層から層別サンプリングを得ることができます – G5W

答えて

0

これは非常にきれいではありませんが、基本機能に固執しました。 これはa[,4] == "b"

編集れるaから少なくとも一つの行を含むサイズbのサンプルが返されます:要求としてのみ基底関数を使用し、少なくとも1つの「A」を描画する必要が両方の状況で動作するように更新少なくとも1つの「b」を描く必要がある。

a <- data.frame(matrix(1:36,ncol=3),rbind(as.matrix(rep('a',each=10)),as.matrix(rep('b', each=2)))) 
names(a) <- c("X1","X2","X3","X4") 

b <- 5 
a2 <- data.frame() 

for (i in b){ 
    draw <- sample(1:nrow(a),b-1,replace = F) # draw a sample of size b-1 
    a2<- a[draw,]   # store rows in a2 
    a3<- a[-draw,]  # store rest in a3 
    if(sum(a2[,4]=="b") == 0){ # if a2 has no "b" in column 4 
    # draw 1 value from rownames containing "b" in fourth column and append to draw, store in draw2 
    draw2 <- c(draw,sample(rownames(a[which(a$X4=="b"),]),1,replace = F)) 
    # else draw one random row from rownames not in a but not in a2 
    }else{ 
    if(sum(a2[,4]=="a") == 0){ # if a2 has no "a" in column 4 
    # draw 1 value from rownames containing "a" in fourth column and append to draw, store in draw2 
    draw2 <- c(draw,sample(rownames(a[which(a$X4=="a"),]),1,replace = F)) 
    # else draw one random row from rownames not in a but not in a2 
    } 
    else {draw2 <- c(draw,sample(rownames(a3),1,replace = F))}} 
    a2<- a[draw2,] # pick these rows 
} 
a2 
関連する問題