R对多个条件使用if else语句

时间:2016-04-23 15:21:13

标签: r if-statement

示例数据:

x<-runif(100, min=0, max=1)
y<-runif(100, min=0, max=1)
dif<-x-y
dat<-data.frame(x,dif)

我想要做的是在名为dat的数据框suit中创建另一列。如果x小于0.15且dif小于0,则suit的值应为3.如果x小于0.15且dif大于0,而suit的值应为2,如果dif大于0,则suit的值为1。

这是我准备的代码。

if(dat$x<0.15 & dat$dif<0){
   dat$suit<-3
} else {
if(dat$x>=0.15 & dat$dif<0){
   dat$suit<-2  
} else {
  dat$suit<-1  
 }
}

它将dat$suit的所有值都设为1.我不确定我在这里做错了什么。

感谢您的帮助。

2 个答案:

答案 0 :(得分:7)

可以使用ifelse

完成此操作
with(dat, ifelse(x < 0.15 & dif <0, 3, ifelse(x > 0.15 & dif < 0, 2, 1)))

或者

with(dat, as.numeric(factor(1+4*(x < 0.15 & dif < 0) + 2*(x>=0.15 & dif < 0))))

答案 1 :(得分:5)

你的陈述的问题是if只检查测试表达式的第一个元素 - 你应该收到警告。 ifelse已经过矢量化。

此外,您可以按相反的顺序执行测试,以获得更简单的等效表达式:

with(dat,
     ifelse(dif >= 0 , 1 , ifelse(x < 0.15, 3, 2))
)