2016-11-26 40 views
-2

条件付きの値に基づいてサンプルをランダムに取得するにはどうすればよいですか?R条件付きランダムサンプル

GROUP CLASS AGE 
A  1  10 
A  2  15 
B  1  10 
B  2  17 
C  1  12 
C  2  14 

が、私はグループ毎に30のレコードのサンプルを取得する必要がありますが、唯一のCLASS = 1からすべてのサンプルdateframeでコンパイル:たとえば、私は、次のデータフレームを持っています。

私は30のレコードのサンプルを取得する方法を知っているが、私はすべてのアイデアを異なるグループthroughtループし、CLASS

ran.sample = sample(nrow(df_all), 30) 
df = df_all[ran.sample, ] 

をフィルタ条件を作成する方法がわかりませんか?

おかげ

+0

あなたは、各グループ 'クラス= 1 'から1つのサンプル行は必要ですか? –

+1

'data.table'を使うと、おそらく2つの重複があります:[samples by class](http://stackoverflow.com/questions/16289182/how-do-you-sample-random-rows-within-each -group-in-a-data-table)と[クラスなしのサンプル](http://stackoverflow.com/questions/24685421/how-do-you-extract-a-few-random-rows-from-a-データテーブルオンザフライ) – etienne

+0

GROUP = A&CLASS = 1 + GROUP = B&CLASS = 1のレコード30件 – Selrac

答えて

1

はこれを試してみてください:

newdf <- df[df$CLASS==1,] 
do.call(rbind, lapply(split(newdf, newdf$GROUP), function(x) x[sample(nrow(x), 30),]))