2016-04-13 4 views
0

であれば、他の条件でサンプル:は、ランダム形式のデータフレームを考えるとR

group   val 
A    10 
A    1 
B    9 
C    6 
... 

私は、結果として、新たなデータフレームで、ランダムに各groupvalをサンプリングしたいと思います。問題は、それぞれgroupvalの数が異なるため、sample()を直接使用することができないということです。今度は、if-elseの条件でサンプルサイズを決定したいと思います。valの数が3より多い場合、3つのvalがサンプリングされます。それ以外の場合は、すべてvalがサンプルとして取得されます。どうやってやるの?前もって感謝します!

+0

@akrunあなたは私がそれを言ったのですか?本当に私はあなたが何について話しているのか分かりません。 – user5779223

答えて

2

data.tableを使用できます。私たちは、このようなnrow ifその条件を追加する必要がある場合は「グループ」でグループ化された(setDT(df))「data.table」から「data.frame」は、変換し、我々は

library(data.table) 
setDT(df)[, .(val=sample(val)), by = group] 

「ヴァル」のsampleを取得します3より大きい、sampleの値3またはelseのすべての値。

setDT(df)[, if(.N >3) sample(val, 3, replace=FALSE) else sample(val), by = group] 
+0

あなたの答えに感謝しますが、if-else条件で決められたサイズで 'val'をどのようにサンプリングできますか?ありがとう。 – user5779223

+0

@ user5779223あなたのコメントは表示されませんでした。投稿を更新しました – akrun

+0

あなたのソリューションは完璧に動作します!ありがとう! – user5779223

関連する問題