ifelse()有三个条件

upa*_*ove 14 r

我有两个向量:

a<-rep(1:2,100)

b<-sample(a)
Run Code Online (Sandbox Code Playgroud)

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

if a>b 1
if a<b 0
if a=b sample(1:2,length(a),replace=T)
Run Code Online (Sandbox Code Playgroud)

前两个可以完成:

ifelse(a>b,1,0)
Run Code Online (Sandbox Code Playgroud)

但我不确定如何将案例纳入ab平等.

Rob*_*ob 24

如何添加另一个ifelse:

ifelse(a>b, 1, ifelse(a==b, sample(1:2, length(a), replace = TRUE), 0))
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果a> b,则得到值1,然后,如果a等于b,则它是1或2(sample(1:2, length(a), replace = TRUE)),如果不是(因此a必须小于b),则得到值0.

  • 这将为每个'a == b`复制`sample(1:2,1)`. (2认同)

Sve*_*ein 9

这是一个简单的方法:

(a > b) + (a == b) * sample(2, length(a), replace = TRUE)
Run Code Online (Sandbox Code Playgroud)

这是基于布尔值的计算,这些布尔值被转换为数值.


mpi*_*tas 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)
Run Code Online (Sandbox Code Playgroud)