2016-09-23 10 views
0

私はRが初めてで、私の質問に対する答えを見つけるのが難しいです。私は正しい方向に私を導く年前に尋ねられたこの質問を見つけました:私は条件付きサンプリングで3番目の列を作成し、どれを最初からランダムに選択するかということです。行列に2つの列がある場合は、1からサンプリングを開始する列をランダムに選択します。2. rngを実行して特定のしきい値を下回る場合にのみ列を切り替えます。私は各行をサンプリングする前にrngを実行できるようにしたい。R:行列の各行を新しい列に無作為にサンプリングする方法ですが、rngの列のみを切り替える方法

私は助けの方法で多くを見つけることができませんでした。それは、何を探しているか分からないことの結果かもしれません。ありがとうございました。例を更新

(リンクから)このコードは、ランダム行1から(いずれか1列又は2列目からの)要素を選ぶことにより、第3列を生成し、すべての行に対してそうします。

t <- matrix(c(1,1,4,6,1,3,2,1,1,7), ncol=2) 
cbind(t,apply(t,1,function(x) sample(x,size=1))) 

     [,1] [,2] [,3] 
[1,] 1 3 1 
[2,] 1 2 2 
[3,] 4 1 4 
[4,] 6 1 1 
[5,] 1 7 1 

Iは、ランダムにその列から最初で唯一のサンプルでカラム1または2を選択することによって、カラム3を構築行列を生成できるようにします。そして、各列が構築された後、rngを実行します。 rngがスレッショルド以下の数値を生成する場合は、構築元の列を切り替える必要があります。

 [,1] [,2] [,3] 
[1,] 1 3 3 
[2,] 1 2 2 
[3,] 4 1 4  (supposedly rng meets threshold here and switches from col 2 to 1) 
[4,] 6 1 6 
[5,] 1 7 1 
+0

あなたが参照問題のように、例を提供してください。また、私はちょっと混乱しています:行単位でサンプリングする場合、「サンプリングする列をランダムに選択する」とはどういう意味ですか?例を使って説明しておけば助けになります。 –

+0

例を更新しました。ありがとうございました。 –

答えて

0

我々は、我々が最初にランダムに我々は二つの引数を取る簡単な関数を書くことができます

def <- sample(1:2, 1) # set default 

デフォルトの列を選択私たちのサンプル

x <- 1:10 
sample(x[x > 5]) 
sample(x[x < 10] 
0

の範囲を設定することができます:ベクトルをx (長さ2にする必要があります)、しきい値(ここではデフォルトのしきい値を0.2に設定します)。 runif()で生成された乱数がしきい値より小さい場合は、3 - defxから選択します(そのため、列を切り替えます)。それ以外の場合はデフォルトを使用します。

sample_row <- function(x, thr = .2) x[ifelse(runif(1) <= thr, 3 - def, def)] 

ことapply、およびcbindを介して実行。例では、defは2で、2行目は、「スイッチ」されています:

cbind(t, apply(t, 1, sample_row)) 
#  [,1] [,2] [,3] 
# [1,] 1 3 3 
# [2,] 1 2 1 
# [3,] 4 1 1 
# [4,] 6 1 1 
# [5,] 1 7 7 
関連する問題