Geschachtelte ifelse-Anweisung
Ich lerne immer noch, wie man einen SAS-Code in R übersetzt, und bekomme Warnungen. Ich muss verstehen, wo ich Fehler mache. Was ich tun möchte, ist eine Variable zu erstellen, die 3 Status einer Bevölkerung zusammenfasst und unterscheidet: Festland, Übersee, Ausländer. Ich habe eine Datenbank mit 2 Variablen:
ID Nationalität:idnat
(Französisch, Ausländer),Obidnat
ist dann französisch:
idbp
(Festland, Kolonie, Übersee)Ich möchte die Info von zusammenfassenidnat
undidbp
in eine neue Variable namensidnat2
:
Alle diese Variablen verwenden "Zeichentyp".
Ergebnisse in Spalte idnat2 erwartet:
idnat idbp idnat2
1 french mainland mainland
2 french colony overseas
3 french overseas overseas
4 foreign foreign foreign
Hier ist mein SAS-Code, den ich in R übersetzen möchte:
if idnat = "french" then do;
if idbp in ("overseas","colony") then idnat2 = "overseas";
else idnat2 = "mainland";
end;
else idnat2 = "foreigner";
run;
Hier ist mein Versuch in R:
if(idnat=="french"){
idnat2 <- "mainland"
} else if(idbp=="overseas"|idbp=="colony"){
idnat2 <- "overseas"
} else {
idnat2 <- "foreigner"
}
Ich erhalte diese Warnung:
Warning message:
In if (idnat=="french") { :
the condition has length > 1 and only the first element will be used
Mir wurde geraten, ein "verschachteltes" zu verwendenifelse
"stattdessen für seine Leichtigkeit, aber mehr Warnungen bekommen:
idnat2 <- ifelse (idnat=="french", "mainland",
ifelse (idbp=="overseas"|idbp=="colony", "overseas")
)
else (idnat2 <- "foreigner")
Laut Warnmeldung ist die Länge größer als 1, sodass nur die Angaben zwischen den ersten Klammern berücksichtigt werden. Entschuldigung, aber ich verstehe nicht, was diese Länge hier zu tun hat? Weiß jemand wo ich falsch liege?