19

我有两个向量:

a<-rep(1:2,100)

b<-sample(a)

我想要一个 ifelse 条件,将 的每个值a与 的相应值进行比较b,并执行以下操作:

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

前两个可以用:

ifelse(a>b,1,0)

但我不确定如何将情况合并到ab相等。

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 回答
10

这是一个简单的方法:

(a > b) + (a == b) * sample(2, length(a), replace = TRUE)

这是基于将布尔值转换为数值的计算。

于 2013-09-02T12:13:38.973 回答
8

你的问题有歧义。您想要所有索引的不同随机值a==b还是所有索引的一个随机值?

@Rob 的答案将在第二种情况下起作用。对于第一种情况,我建议避免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 回答