Declaración ifelse anidada
Todavía estoy aprendiendo a traducir un código SAS a R y recibo advertencias. Necesito entender donde estoy cometiendo errores. Lo que quiero hacer es crear una variable que resuma y diferencie el estado de una población: continental, extranjero, extranjero. Tengo una base de datos con 2 variables:
Id nacionalidad:idnat
(francés, extranjero),Siidnat
es francés entonces
idbp
(continental, colonia, extranjero)Quiero resumir la información deidnat
yidbp
en una nueva variable llamadaidnat2
:
Todas estas variables utilizan "tipo de carácter".
Resultados esperados en la columna idnat2:
idnat idbp idnat2
1 french mainland mainland
2 french colony overseas
3 french overseas overseas
4 foreign foreign foreign
Aquí está mi código SAS que quiero traducir en R:
if idnat = "french" then do;
if idbp in ("overseas","colony") then idnat2 = "overseas";
else idnat2 = "mainland";
end;
else idnat2 = "foreigner";
run;
Aquí está mi intento en R:
if(idnat=="french"){
idnat2 <- "mainland"
} else if(idbp=="overseas"|idbp=="colony"){
idnat2 <- "overseas"
} else {
idnat2 <- "foreigner"
}
Recibo esta advertencia:
Warning message:
In if (idnat=="french") { :
the condition has length > 1 and only the first element will be used
Me aconsejaron usar un "anidadoifelse
"En cambio, por su facilidad, pero recibe más advertencias:
idnat2 <- ifelse (idnat=="french", "mainland",
ifelse (idbp=="overseas"|idbp=="colony", "overseas")
)
else (idnat2 <- "foreigner")
De acuerdo con el mensaje de advertencia, la longitud es mayor que 1, por lo que solo se tendrá en cuenta lo que haya entre los primeros corchetes. Lo siento, pero no entiendo qué tiene que ver esta longitud aquí. ¿Alguien sabe donde me equivoco?