R ifelse statement

徘徊边缘 提交于 2021-01-30 09:03:31

问题


I'm pretty new at R. I have the following data set (data frame) composed by characters:

"Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y"
"Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "N" "N" "Y" "Y" "Y"
"Y" "Y" "Y" "Y" "Y" "N" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y"
"Y" "N" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "N" "Y" "Y" "Y" "Y" "Y" "Y"
"Y" "Y" "Y" "Y" "Y" "Y" "N" "Y" "Y" "Y" "N" "Y" "Y" "Y" "Y" "Y" "Y"
"Y" "Y" "Y" "N" "Y" "Y" "Y" "Y" "N" "Y" "Y" "Y" "Y" "N" "Y" "Y" "Y"
"Y" "Y" "Y" "Y" "Y" "Y" "N" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y"
"Y" "Y" "Y" "Y" "Y" "Y" "N" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y"
"Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y"
"Y" "Y" "N" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y"
"Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y"
"Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y" "Y"
"Y" "Y" "Y" "Y" "Y" "Y" "N" "Y" "Y" "Y" "Y" "Y" "Y" "N" "Y" "Y"

and I want to replace Y with 1 and N with 0. Thus I'm using the following expression:

ifelse(Dataset$A=="N",Dataset$A<-0,Dataset$A<-1)  

Although, the result from the ifelse function is correct but when printing the variable I m getting this:

"1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1"
"1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1"
"1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1"
"1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1"
"1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1"
"1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1"
"1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1"
"1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1"

Do you have any hint why?


回答1:


Add another variable B to dataset and use ifelse function where you get 0 for "N"and 1 for "Y" values

Dataset$B <- ifelse(Dataset$A=="N",0,1)

or you can use ifelse function on same variable as

Dataset$A <- ifelse(Dataset$A=="N",0,1)



回答2:


You could also do:

Dataset$A <- (Dataset$A=="Y")*1



回答3:


ifelse can work, but an other option is to use the switch() function:

vec <- c("Y","Y","Y","N","N","Y")
sapply(vec, switch, "Y"=1,"N"=0)

it does what you want, but for vectors of size 1. You then sapply it through all of your elements.

The good thing about switch function (that ifelse doesn't do) is that you can use as many substitution as you want ("A"=1, "B"=2, "C"=3, etc...),



来源:https://stackoverflow.com/questions/39634761/r-ifelse-statement

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!