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:

ID Geburtsort:idbp (Festland, Kolonie, Übersee)

Ich möchte die Info von zusammenfassenidnat undidbp in eine neue Variable namensidnat2:

Status: k (Festland, Übersee, Ausländer)

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?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage