如果有条件重新编码
If else with conditional recoding
我在 data2 中有一个变量 "dif2",我将向名为 "L" 的数据集添加一个新变量,条件是 ( if -0.1 <= dif2 <= 0.1 , L == "B", 而如果 dif2 > 0.1, 那么 L == "S", 如果 dif2 <-0.1 那么 L == "E")
我尝试了不同的方法。首先我使用 for 循环 :
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 之间的一些数字没有正确编码)
重新编码时,您应该根据 dif2 替换 R 列中的值。
# 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"))
我在 data2 中有一个变量 "dif2",我将向名为 "L" 的数据集添加一个新变量,条件是 ( if -0.1 <= dif2 <= 0.1 , L == "B", 而如果 dif2 > 0.1, 那么 L == "S", 如果 dif2 <-0.1 那么 L == "E")
我尝试了不同的方法。首先我使用 for 循环 :
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 之间的一些数字没有正确编码)
重新编码时,您应该根据 dif2 替换 R 列中的值。
# 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"))