我有两个向量:
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
相等的情况。
答案 0 :(得分:23)
如何添加另一个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.
答案 1 :(得分:9)
这是一种简单的方法:
(a > b) + (a == b) * sample(2, length(a), replace = TRUE)
这是基于布尔值的计算,这些布尔值被转换为数值。
答案 2 :(得分: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)