19

私は2つのベクトルを持っています:

a<-rep(1:2,100)

b<-sample(a)

aの各値を の対応する値と比較bし、次のことを行う ifelse 条件が必要です。

if a>b 1
if a<b 0
if a=b sample(1:2,length(a),replace=T)

最初の 2 つは次のように実行できます。

ifelse(a>b,1,0)

aしかし、とbが等しいケースを組み込む方法がわかりません。

4

3 に答える 3

30

別のifelseを追加するのはどうですか:

ifelse(a>b, 1, ifelse(a==b, sample(1:2, length(a), replace = TRUE), 0))

この場合、a>b の場合は値 1 を取得し、a が b と等しい場合は 1 または 2 ( sample(1:2, length(a), replace = TRUE))、そうでない場合 (したがって a は b よりも小さい必要があります) は値 0 を取得します。

于 2013-09-02T11:11:17.230 に答える
8

あなたの質問にはあいまいさがあります。すべてのインデックスに異なるランダム値が必要ですか、a==bそれともすべてのインデックスに 1 つのランダム値が必要ですか?

@Rob による回答は、2 番目のシナリオで機能します。最初のシナリオでは、次のことを避けることをお勧めしますifelse:

u<-rep(NA,length(a))
u[a>b] <- 1
u[a<b] <- 0
u[a==b] <- sample(1:2,sum(a==b),replace=TRUE)
于 2013-09-02T11:34:31.577 に答える