Zagnieżdżona instrukcja ifelse
Nadal uczę się tłumaczyć kod SAS na R i otrzymuję ostrzeżenia. Muszę zrozumieć, gdzie popełniam błędy. Chcę stworzyć zmienną podsumowującą i różnicującą 3 status populacji: kontynent, za granicą, obcokrajowiec. Mam bazę danych z 2 zmiennymi:
id narodowość:idnat
(francuski, cudzoziemiec),Jeśliidnat
jest wtedy francuski:
idbp
(kontynent, kolonia, za granicą)Chcę podsumować informacje zidnat
iidbp
do nowej zmiennej o nazwieidnat2
:
Wszystkie te zmienne używają „typu znaku”.
Oczekiwane wyniki w kolumnie idnat2:
idnat idbp idnat2
1 french mainland mainland
2 french colony overseas
3 french overseas overseas
4 foreign foreign foreign
Oto mój kod SAS, który chcę przetłumaczyć w R:
if idnat = "french" then do;
if idbp in ("overseas","colony") then idnat2 = "overseas";
else idnat2 = "mainland";
end;
else idnat2 = "foreigner";
run;
Oto moja próba w R:
if(idnat=="french"){
idnat2 <- "mainland"
} else if(idbp=="overseas"|idbp=="colony"){
idnat2 <- "overseas"
} else {
idnat2 <- "foreigner"
}
Otrzymuję to ostrzeżenie:
Warning message:
In if (idnat=="french") { :
the condition has length > 1 and only the first element will be used
Poradzono mi, żebyś użył „zagnieżdżonego”ifelse
„zamiast tego za jego łatwość, ale uzyskaj więcej ostrzeżeń:
idnat2 <- ifelse (idnat=="french", "mainland",
ifelse (idbp=="overseas"|idbp=="colony", "overseas")
)
else (idnat2 <- "foreigner")
Zgodnie z komunikatem ostrzegawczym długość jest większa niż 1, więc brane są pod uwagę tylko to, co znajduje się pomiędzy pierwszymi nawiasami. Przepraszam, ale nie rozumiem, co ta długość ma tutaj wspólnego? Ktoś wie, gdzie się mylę?