Instrução ifelse aninhada
Eu ainda estou aprendendo como traduzir um código SAS em R e recebo avisos. Eu preciso entender onde estou cometendo erros. O que eu quero fazer é criar uma variável que resuma e diferencie o status de uma população: continente, estrangeiro e estrangeiro. Eu tenho um banco de dados com duas variáveis:
nacionalidade id:idnat
(francês, estrangeiro),E seidnat
é francês então:
idbp
(continente, colônia, no exterior)Quero resumir as informações deidnat
eidbp
em uma nova variável chamadaidnat2
:
Todas essas variáveis usam "tipo de caractere".
Resultados esperados na coluna idnat2:
idnat idbp idnat2
1 french mainland mainland
2 french colony overseas
3 french overseas overseas
4 foreign foreign foreign
Aqui está o meu código SAS que quero traduzir em R:
if idnat = "french" then do;
if idbp in ("overseas","colony") then idnat2 = "overseas";
else idnat2 = "mainland";
end;
else idnat2 = "foreigner";
run;
Aqui está minha tentativa em R:
if(idnat=="french"){
idnat2 <- "mainland"
} else if(idbp=="overseas"|idbp=="colony"){
idnat2 <- "overseas"
} else {
idnat2 <- "foreigner"
}
Eu recebo este aviso:
Warning message:
In if (idnat=="french") { :
the condition has length > 1 and only the first element will be used
Fui aconselhado a usar um "aninhadoifelse
"em vez disso, por sua facilidade, mas receba mais avisos:
idnat2 <- ifelse (idnat=="french", "mainland",
ifelse (idbp=="overseas"|idbp=="colony", "overseas")
)
else (idnat2 <- "foreigner")
De acordo com a mensagem de aviso, o tamanho é maior que 1, portanto, somente o que está entre os primeiros colchetes será levado em consideração. Desculpe, mas eu não entendo o que este comprimento tem a ver com aqui? Alguém sabe onde estou errado?