2016-07-06 48 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