我有两个向量:
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)
但我不确定如何将情况合并到a
和b
相等。
我有两个向量:
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)
但我不确定如何将情况合并到a
和b
相等。
添加另一个 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。
这是一个简单的方法:
(a > b) + (a == b) * sample(2, length(a), replace = TRUE)
这是基于将布尔值转换为数值的计算。
你的问题有歧义。您想要所有索引的不同随机值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)