nested for loop mit if abfrage

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
ad_berlin
Beiträge: 9
Registriert: Do Aug 15, 2019 2:44 pm

nested for loop mit if abfrage

Beitrag von ad_berlin »

Hi,

ich möchte country codes (buchstaben) in einem numerischen country code überschreiben. den schlüssel (also buchstaben und numerischen country code) habe ich aus einer .csv importiert. ich habe mir folgenden nested for loop mit if abfrage überlegt aber leider läuft das ganze nicht. mit folgendem fehler
Error in Ops.factor(doc_report$nationality, countries$code3[n]) :
level sets of factors are different

habe leider keinen plan warum.

Code: Alles auswählen

i<-1
n <- 1
for (i in 1:nrow(doc_report)) {
  for (n in 1:nrow(countries)) {
    if(doc_report$nationality[i] == countries$code3[n])
      doc_report$nationality[i] <- countries$numcode[n]
    else
      if(doc_report$nationality[i] == "NA")
      doc_report$nationality[i] <- 000
  }
}
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: nested for loop mit if abfrage

Beitrag von EDi »

Du solltest auf das umwandeln in Faktoren verzichten (blödsrweise eine Standardeinstellung von R).
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: nested for loop mit if abfrage

Beitrag von Athomas »

Wenn Du Daten und ein vollständiges Programm zeigen würdest, könnte man (eine Menge) mehr sagen :( !

Code: Alles auswählen

if(doc_report$nationality[i] == "NA")
Das wird nicht (wie voraussichtlich gewünscht) funktionieren...
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: nested for loop mit if abfrage

Beitrag von jogo »

Das sieht mir sehr nach einem update-join aus. Aber man kann die gewünschten Daten auch erstmal als zusätzliche Spalte einfügen.
(dann wird es in einem ersten Schritt einfach merge())
Faktoren sind dabei durchaus hinderlich. Insofern kann ich die Empfehlung von Edi nur bekräftigen.

Gruß, Jörg
Antworten