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]
}
}
}
}
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