2016-04-23 85 views
2

的樣本數據else語句:R如果多個條件

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

我想要做的就是創建一個名爲suit數據幀dat另一列。如果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。我的價值觀不知道我在做什麼錯在這裏。

謝謝你的幫助。

+0

大。謝謝。一個整潔的解決方案。 – user53020

回答

3

使用這既可以做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)))) 
3

同你說的問題是,if只檢查測試表達式的第一個元素 - 你應該已經收到警告。向量化爲ifelse

此外,你可以按照相反的順序執行測試一種更簡單,相當於表達:

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