ifelse()有三个条件

时间:2013-09-02 11:07:38

标签: r

我有两个向量:

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相等的情况。

3 个答案:

答案 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)