-1

data2 に変数 "dif2" があり、( if -0.1 <= dif2 <= 0.1, L == "B", while dif2 > 0.1 の場合、L == "S"、dif2 <-0.1 の場合、L == "E")

さまざまな方法を試しました。最初に for loop を使用しました:

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 の間の数値が正しくコーディングされていませんでした)。

4

1 に答える 1

0

再コーディング中に、dif2 に基づいて列 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"))
于 2016-07-06T07:15:53.253 に答える