ich habe ein etwas komplexeres Problem.
Ich habe eine Matrix mit 5 Spalten (1.Spalte ID, 3. Spalte Phasen und 5. Spalte Jahre)
Die Matrix habe ich mit sortrows nach diesen 3 Spalten sortiert.
Ich möchte nun schauen für wieviele Jahre (am besten aufeinanderfolgende/ ohne Lücken) ich die Phase x mit ID y habe.
Ich hab im Moment noch keine Idee, wie ich das realisieren soll. Ich bin auch so noch nicht ganz der Profi in Matlab.
Anbei meine Textdatei die ich in Matlab eingeladen habe, zur Veranschaulichung.
Im Grunde kann als 6. Spalte die Anzahl der zusammenhängenden Jahre (Bsp: bei der 2 in der ersten Zeile wären es für diese ID keine zusammenhängenden Jahre) stehen.
es würde mir auch reichen, wenn in der 6. Spalte (oder in einer neuen Variable) einfach nur 7 steht (für 7 Jahre)
schöner wär aber die erste Variante.
kannst du deine spalten durchsuchen und nur die raussuchen die dich interessieren.
Claudi
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 13.03.2012, 14:12
Titel:
Hallo,
also ich brauch quasi nur die IDs und Phasen (Spalte 1 und 3) die durchgänge Jahre (Spalte 5) aufweisen und dann am Ende auch noch Jahresreihen von mind. 10 Jahren haben.
rausfinden welche jahre nichtaufeinder folgen.
dort ist die differenz benachbarter jahre nicht 1
Claudi
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 13.03.2012, 16:01
Titel:
Ich hab mich mal abgemüht und das mit for schleifen probiert.
Ich denke es ist umständlich aber funktioniert (noch nicht ganz)
Ich hab meine Daten auch in einem Cell Array, diese hab ich dann sortiert und mir über diverse For_Schleifen herausgefiltert, ob die Zeitreihen durchgängig sind (1 in Spalte 6) oder nicht (0 in Spalte 6).
Das ganze funktioniert für ein Cell - Array super. Nur muss um den ganzen Code noch eine Schleife rum, dass wenn er mit dem ersten Cell - array fertig ist, einfach zum nächsten geht.
Die For_Schleife, die schon drumherumsteht mit z funktioniert, aber die Daten in X werden überschrieben.
Wie kann ich das ändern bzw. was muss noch in die äußerste For_Schleife rein, dass wenn meine erste Cell - array (21 Werte in X) mit der zweiten Cell - array an 22. Stelle in X weitermacht?
das würde nicht bei jedem durchlauf der äußeren schleife resettet. sonst fängst du ja immer bei j=1 an.
Claudi
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 13.03.2012, 16:12
Titel:
wo genau muss dann da rein?
Claudi
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 13.03.2012, 16:13
Titel:
wenn ich bei der if schleife das j durch ein k ersetze, dann überschreibt der mir in X trotzdem die Daten und haut ans Ende nur noch paar Zellen mit Nullen
k giebts bei dir auch schon war ein schlechtes beispiel. nimm en variable die nicht vergeben ist. diese musst du dann außerhalb der äußeren schleife noch mit var=1 initialisieren.
du hast mein beispiel nur bei dir reinkopiert. und nicht auf dein problem angewandt. du definerst aber oben auch immer dein X neu seh ich grade da wird meine lsg ach nicht helfen. es ist schwer das umzuschreiben da dein code so nicht lauffähig ist. und ich bin jetzt auch von rechner weg. wenn du nochmal lauffähigen code postest und dann nochmal schreibt inwieweit dein ergebniss vom gewünschten abweicht setzt ich mich morgen früh nochmal ran dann sollte sich schon eine lsg finden.
Claudi
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 14.03.2012, 08:59
Titel:
Guten Morgen,
mein Code läuft doch (so wie ich ihn ursprünglich mal gepostet habe) und er bringt mir auch das gewünschte Ergebnis für einen Cell Array.
Ich brauch nur noch eine äußere Schleife, die sagt, dass wenn Matlab mit dem ersten Cell Array fertig ist, in das nächste übergeht und dann die Daten nicht bei X(1,1) reinschreibt sondern bei X((length(vondemXdavor),1).
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.