2016-07-06 21 views
-1

我在data2中有一個變量「dif2」,並且我將添加一個新變量到名爲「L」的數據集中,條件是(如果-0.1 < = dif2 < = 0.1, L ==「B」,而如果dif2> 0.1,那麼L ==「S」,如果dif2 < -0.1那麼L ==「E」)如果還有條件重新編碼

我試過不同的方法。首先我用於循環:

for (i in 1:nrow(data2)) { 
    if(!is.na(data2$dif2[i] < -0.1)){ 
      data2[i,'L'] <- "E" 
    } 
    else if (!is.na(data2$dif2[i] > 0.1)) { 
      data2[i, 'L'] <- "S" 
    } 
    else if (!is.na(data2$dif2[i] <= 0.1 && data2$dif2[i] >= -0.1)) {data2[i, 'L'] <- "B" 
    } 

} 

這並不好。

,然後我直接用重新編碼是這樣的:

data2$dif2[data2$dif2 < -0.1] <- "E" 
data2$dif2[data2$dif2 > 0.1] <- "S" 
data2$dif2[data2$dif2 >= -0.1 && data2$dif2 <= 0.1] <- "B" 

這並不能很好的工作是(-0.1和0之間的數值不正確編碼)

+2

見'ifelse',無需環路,或'cut'。 – zx8754

回答

0

雖然重新編碼就應該更換價值在基於dif2的coulmn L中。

# creating data 
    data2<-data.frame("dif2"=c(-0.2,0.2,0.05)) 
    data2 
     dif2 
    1 -0.20 
    2 0.20 
    3 0.05 
    #recoding 
    data2$L[data2$dif2>0.1]<-"S" 
    data2$L[data2$dif2 < -0.1] <- "E" 
    data2$L[data2$dif2 >= -0.1 & data2$dif2 <= 0.1] <- "B" 
    data2 
     dif2 L 
    1 -0.20 E 
    2 0.20 S 
    3 0.05 B 

或者ifelse

data2$L<-ifelse(data2$dif2 > 0.1, "S","B") 
data2$L<-ifelse(data2$dif2 < -0.1, "E",data2$L) 
> data2 
    dif2 L 
1 -0.20 E 
2 0.20 S 
3 0.05 B 

或者使用cut

data2$L<-cut(data2$dif2, breaks = c(-Inf,-0.1,0.1,Inf),labels=c("E","B","S")) 
+0

謝謝,它確實有用!如果else語句自動忽略NA值 – LeoNiu