Performance-Verbesserung

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
bensca
Beiträge: 2
Registriert: Di Okt 15, 2019 3:19 pm

Performance-Verbesserung

Beitrag von bensca »

Hallo zusammen,
ich möchte mit R ein statistisches Problem lösen. Ich habe bereits einen funktionierenden Ansatz, der aber zu lange benötigt um ihn durch zu rechnen. Vielleicht hat jemand von Euch eine Idee wie man das schlauer programmieren kann, evtl ohne Schleifen.
Vorhanden ist ein Feld "Auftraege". In Auftraege[,1] steht die Auftragsnummer und in Auftraege[,2:200] stehen die Artikelnummern, die bei dem Auftrag bestellt wurden.
Ich möchte dann das Feld "Ergebnis" füllen. In Ergebnis[,1] stehen alle Artikelnummer. Gefüllt werden soll Ergebnis[,2:1000] mit Artikelnummern, die zusammen mit Ergebnis[,1] gekauft wurden.
Mein funktionierender Code lautet:

Code: Alles auswählen

for (i in 1:length(Ergebnis$Artikelnummer)) {
  for (j in 1:length(Auftraege$Auftragsnummer)) {
    if (length(which(Auftraege[j,]==Ergebnis[i,1])) == 0){
      next
    }
    for (k in 2:(min(which(is.na(Auftraege[j,])))-1) ) { 
      if ( Auftraege[j,k]!=Ergebnis[i,1] ){
        Ergebnis[i,min(which(is.na(Ergebnis[i,])))] <- Auftraege[j,k]
      }
    }
  }
}
Da sowohl die i- als auch j-Schleife bis über 100000 geht, dauert das ganze natürlich... Hochgerechnet etwa 60 Tage. Hat jemand ne Idee die performance zu verbessern?

Ein Beispiel des Feldes "Auftraege"

Code: Alles auswählen

0011566702	10131925	10131927	10136287	10136292	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA
0011677781	16320	16800	16810	18270	18280	807310	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA
0011724272	204520	204590	1083740	1083880	1111150	1111640	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA
0011760684	10149459	10149460	10149461	10149462	10149463	10149464	10149465	10149466	10149467	10149468	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA
0011784677	10151542	10151543	10151545	10151549	10151551	10151552	10151555	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA
0011804598	10107450	10123183	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA
0011811507	31540	4028890	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA
0011813716	6670	16800	10050265	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA
0011818851	16800	16810	807310	4229030	10050265	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA

Das Felde "Ergebnis" soll befüllt werden

Code: Alles auswählen

16610	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA
16620	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA
16630	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA
16670	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA
16710	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA
16720	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA
16740	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA
16800	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA
16810	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA
16820	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA
Zuletzt geändert von bensca am Mi Okt 16, 2019 9:44 am, insgesamt 3-mal geändert.
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Performance-Verbesserung

Beitrag von jogo »

Hallo bensca,

kannst Du bitte die Formatierung des Codes in Deiner Nachricht verbessern?
siehe viewtopic.php?f=20&t=29

Hast Du ein kleines Datenbeispiel für uns?
siehe viewtopic.php?f=20&t=11

Willkommen im Forum!
Jörg
Antworten