我有两个向量:
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)
但我不确定如何将案例纳入a和b平等.
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) + (a == b) * sample(2, length(a), replace = TRUE)
Run Code Online (Sandbox Code Playgroud)
这是基于布尔值的计算,这些布尔值被转换为数值.
你的问题含糊不清.你想要所有索引的不同随机值,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)