2017-11-17 4 views
1

数字の大きいプールからサンプルしたい。 -2000:5000
特定の数字の重みを80%に設定したいと考えています。
他のすべての可能性は、他のすべての番号と同じである必要があります。小さなサンプルのためにこれを行う1桁の重みを使用したサンプリング

は簡単です:
sample(-2:2, 10, replace = TRUE, prob=c(0.05, 0.05, 0.80, 0.05, 0.05))
この希望出力:

[1] 0 0 0 0 0 -1 0 0 0 0

どのようにすることができます私は数字の大きな範囲のためにこれを行う?

答えて

2

あなたの確率ベクトルを実際に操作するだけです。だから、

values <- -2:2 
special_value <- 0 

次にあなたが

probs <- rep(1, length(values)) 
probs[values==special_value] <- (length(values)-1)*.8/(1-.8) 

を行うことができます、あなたが唯一のすべての確率で別のベクトルを実行する必要が

sample(values, 10, replace = TRUE, prob=probs) 
+0

ありがとう、私はあなたに真実を伝えるために小さなコードを望んでいました。例えば 'サンプル(-2:2,10、replace = TRUE、prob = {0:0.8})' どうして彼らはこれをサンプルに統合しなかったでしょうか... –

+1

あなたは 'probs < - ifelse値を== special_value、0.8、0.2 /(length(x) - 1)) 'もしあなたが少しコードを短縮したいなら... – markdly

2

を使用しています。確率ベクトルを作成するときには、論理テストを使用して、希望の数値であれば "p1 = 0.8"を、それ以外の場合には "p2 = 0.2/n"を定義することができます。コードは次のように実行されます。

n <- 37 # your num 
x <- -100:1000 # your sequence 
probs <- ifelse(x == n, 0.8, (1 - 0.8) /length(x)) # determine probabilities taking on account they have to add up to 1 
sum(probs) 
sample(x = x, size = 1000, prob = probs) 

助けがあれば教えてください。

関連する問題