|
|
Dublikate aus einer Spalte aussortieren |
|
Barbara_Karl93 |
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 19.11.18
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.11.2018, 08:13
Titel: Dublikate aus einer Spalte aussortieren
|
|
Hallo zusammen,
ich habe eine .csv Datei eingelesen in matlab als Cells.
In dieser stehen in jeder Zeile Daten, die jeweils mit einer ID identifizierbar sind. Diese ID kommt mindestens 2 mal vor. (ein Endzeitpunkt und ein Startzeitpunkt).
Ich möchte nun aus der kompletten Tabelle, in der in Spalte 2 diese ID steht, alle Dublikate einer ID löschen. Dabei möchte ich die ID mit dem ersten/frühesten/ältesten Datum behalten. (Uhrzeit steht in Spalte 20)
Datum ist in folgendem Formalt in dem Cell enthalten:
dd.mm.yyyy HH:MM:SS
Ich hoffe mir kann jemand helfen, leider habe ich diese Art von Aufgaben noch nie bearbeitet.
Herzlichen Dank schon mal für die Hilfe!!
Beschreibung: |
|
Download |
Dateiname: |
hilfe_matlab_2.PNG |
Dateigröße: |
21.48 KB |
Heruntergeladen: |
276 mal |
|
|
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 20.11.2018, 17:37
Titel: Re: Dublikate aus einer Spalte aussortieren
|
|
Hallo Barbara_Karl93,
Was ist Deine Frage?
Kannst Du die Tabelle in Matlab bereits importieren oder gehört das zum Problem?
Zitat: |
ID mit dem ersten/frühesten/ältesten Datum |
Sind das 3 Daten oder bedeuetet "ersten" und "frühesten" das gleiche?
Gruß, Jan
|
|
|
Barbara_Karl93 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 19.11.18
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.11.2018, 19:41
Titel:
|
|
Tut mir leid, das ich mich nicht gut ausgedrückt habe.
Die Datei ist eingeladen! Und mit der Zeit ist die ältere gemeint, ich wusste nicht wie ich das am besten schreibe.
Sorry...
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 21.11.2018, 15:42
Titel:
|
|
Hallo Barbara_Karl93,
Rückfragen gehören im Allgemeinen zum Weg ein Problem zu lösen. Und dafür ist dieses Forum ja da :-)
Wie hast Du die Datei genau geladen? Wurde das Datum als datetime Objekt eingelesen?
Möglicherweise bekommst du die gewünschten Indices mit einem einfachen
unique(..., 'last')
Befehl hin. Bei "dd.mm.yyyy HH:MM:SS" kann man aber nicht einfach vorher alphabetisch sortieren, während das bei "yyyy.mm.dd HH:MM:SS" möglich wäre. Dann hilft die Umwandlung in ein datetime-Objekt oder das alte datenum.
Gruß, Jan
|
|
|
Barbara_Karl93 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 19.11.18
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.11.2018, 16:08
Titel:
|
|
|
|
|
Hallo Jan S,
danke für den Vorschlag mit unique. Zumindest rechnet Matlab was. Ich bin mir aber nicht ganz sicher ob es das gewünschte Ergebnis liefert, ich denke mal noch nicht ganz.
Zum Verständis: in Spalte 2 stehen meine ID's und in Spalte 20 wäre die Uhrzeit mit Datum.
eingegeben habe ich jetzt:
A=zvmoktober;
B=unique([A{:,2}], 'last')
Ergebnis: beispielhaft ein Ausschnitt:
Columns 85629 through 85632
"246475" "246476" "246477" "246478"
Columns 85633 through 85636
"246479" "246480" "246481" "246482"
Columns 85637 through 85640
"246483" "246484" "246485" "246486"
Realistisch ist das Ergebnis, denn ich habe jede ID mindestens 2 mal....
Wie mein Datum eingelesen wurde, weiß ich ehrlich gesagt nicht. Die Spalte mit dem Datum und der Zeit ist in einer riesigen Tabelle enthalten, und die komplette Tabelle habe ich als Cell-Datei eingelesen.
Meine Frage zu dem unique-Befehl:
Welche Spalte gebe ich dann an? Ich möchte die Dublikate bei den ID's aussortieren aber eben je nach dazugehöriger Uhrzeit. Die komplette Zeile der Dublikate soll dann bestenfalls auch gleich gelöscht werden.
Vielleicht wird mein Problem jetzt nochmal klarer. Ich weiß nicht wie ich es sonst besser formulieren soll.
Vielen Dank schon mal für die Hilfe!
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 22.11.2018, 16:10
Titel:
|
|
Hallo Barbara_Karl93,
Zitat: |
Wie mein Datum eingelesen wurde, weiß ich ehrlich gesagt nicht. |
Mit welchem Befehl hast Du das File denn eingelesen?
Ein kleines Beispiel mit Deinen Daten würde helfen.
Vielleicht hilft dies:
Gruß, Jan
|
|
|
Barbara_Karl93 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 19.11.18
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 23.11.2018, 05:51
Titel:
|
|
|
|
|
Wenn ich deinen Code
einfach Teste, dann kommt folgende Fehlermeldung:
Ich denke das "unique" nicht mit dem Dateiformat "Cell" in Matlab zusammenpasst. Vielleicht kann ich meine Datei ja doch anders einlesen....
Jezt hab ichs mit deinem Code mit {} klammern probiert. dann kommt keine Fehlermeldung aber auch irgendwie keine Tabelle als Ergebnis....sondern ein 1x1 string, mit dem Inhalt Result="xxx"
Jetzt erst mal der Anhang, mit dem .m File zum einladen der Datei. Ich habe es händisch ausgewählt mit der Matlab Oberfläche und dann gespeichert. Quasi das ich es nicht jedes mal wieder händisch einladen muss. Wenn es dafür eine Elegantere Lösung gibt, bin ich dafür gerne offen.
Außerdem habe ich einen sehr kleinen Ausschnitt meiner Datei mit eingefügt, sie ist als .csv Datei gespeichert. Beim Speichern steht dort aber "unicodeText", falls das noch wichtig ist. Ich kann hier leider keine csv oder xlsx Datei hochladen. Daher jetzt in bildformat. Ich habe alle unrelevanten Spalten mal ausgeblendet, damit es nicht zu Unübersichlicht wird.
Nochmal zur erklärung was ich möchte:
Ich brauche in der Tabelle mit der ich weiterarbeiten will, die ID's (Spalte B/2)mit der aktuelleren Uhrzeit (aus Spalte T/20) und dem Code (I/9), der NICHT "127" ist. Alle Anderen Zeilen dürfen gelöscht werden. Somit sollte ich keine Dublikate oder Mehrfachnennungen mehr bei den ID's haben.
Gruß
Barbara
Beschreibung: |
Die Datei mit der ich meine .CSV datei einlese in matlab |
|
Download |
Dateiname: |
importer_csv_datei.m |
Dateigröße: |
1.87 KB |
Heruntergeladen: |
248 mal |
Beschreibung: |
Hier ein Bild der Datei, mit den gekennzeichneten Spalten, Uhrzeit, ID und Code. |
|
Download |
Dateiname: |
hilfe_matlab_3.PNG |
Dateigröße: |
74.46 KB |
Heruntergeladen: |
256 mal |
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 23.11.2018, 10:49
Titel:
|
|
Hallo,
ich hatte dir ja mal empfohlen, die Daten als Table einzulesen. Das únd die Verwendung von datetime für die Datumsspalte könnte das ganze sehr erleichtern.
Wenn du einen Ausschnitt deiner Daten anhängst statt nur ein Bild davon, könnte man die Vorschläge direkt ausprobieren. Das würde einiges an Hin und Her ersparen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Barbara_Karl93 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 19.11.18
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 23.11.2018, 14:04
Titel:
|
|
Hallo Harald,
Ja ich werde es nochmal versuchen die Datei anders einzuladen.
Allerdings das mit dem Hochladen funktioniert irgendwie nicht. In welchem Format kann ich hier in dem Forum denn eine in excel vorliegende Datei hochladen.
Es kam immer die meldung das dieses von mir verwendete Format verboten sei. (Versucht habe ich .csv und .xlsx)
Vielen Dank!
Gruß Barbara
[EDITED, Jan, Bitte nicht die gesamte vorhergehende Nachricht zitieren - Danke!]
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 23.11.2018, 14:41
Titel:
|
|
|
|
|
Hallo Barbara_Karl93,
Zitat: |
Ich denke das "unique" nicht mit dem Dateiformat "Cell" in Matlab zusammenpasst. |
Ein kurzer Blick in die Dokumentation klärt, dass
unique
durchaus mit Cells funktioniert. Sie müssen dann allerdings Char-Vektoren enthalten. Ob mein Beispiel dies tut, weiß ich nicht, weil Du so weit ich sehe noch nicht erklärt hast, wie Deine Input-Daten genau aussehen.
Es wäre einfacher eine Lösung zu schreiben, wenn Du einen kleinen Beispiel-Datensatz posten würdest, denn dann müsste man nicht mehr raten, welche Daten Du genau meinst.
Zitat: |
Jezt hab ichs mit deinem Code mit {} klammern probiert. |
Bitte poste den Code, ich weiß nicht genau, was Du wie probiert hast.
Zitat: |
Beim Speichern steht dort aber "unicodeText", falls das noch wichtig ist. |
Was meinst Du mit "beim Speichern"?
Zitat: |
Ich kann hier leider keine csv oder xlsx Datei hochladen. |
Du kannst das File einfach als Zip komprimieren und dann hochladen. Ein Screenshot ist weniger hilfreich.
Zitat: |
Ich brauche in der Tabelle mit der ich weiterarbeiten will, die ID's (Spalte B/2)mit der aktuelleren Uhrzeit (aus Spalte T/20) und dem Code (I/9), der NICHT "127" ist. Alle Anderen Zeilen dürfen gelöscht werden. Somit sollte ich keine Dublikate oder Mehrfachnennungen mehr bei den ID's haben. |
Das Detail mit "127" hattest Du bisher noch nicht erwähnt. Bitte versuche das Problem so klar wie möglich zu beschreiben. Eigentlich geht es wohl nur um 3 Zeilen Code, es wird nur nicht richtig klar, was die Inputs genau sind und was Du erreichen möchtest.
Gruß, Jan
|
|
|
Barbara_Karl93 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 19.11.18
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.11.2018, 08:03
Titel:
|
|
|
|
|
Hallo zusammen,
tut mir leid für die Unklarheiten, ich versuche es jetzt einach nochmal von Beginn an, ich hoffe das ich bei der Problembeschreibung jetzt nichts vergesse und ich die Datei richtig eingeladen habe. Im Anhang auch ein Beispiel!
Importieren der Datei:
Die Tabelle ist nun eingelesen als "table" mit dem im Anhang liegenden .m-File, dieses habe ich beim manuellen Import schreiben lassen und so abgespeichert. Ich denke so kann man mein "Einladen" der Datei am besten nachvollziehen.
Vielleicht könnt ihr mir dazu ja sagen, ob das nun die bessere bzw Beste Möglichkeit ist meine Daten zu analysieren. (Zuvor war es ja als "Cell" eingelesen, was anscheinend keine so optimale Lösung war....)
Beschreibung des Problems:
Ich brauche in der Tabelle mit der ich weiterarbeiten will, die ID's (stehen in Spalte 2) mit der aktuelleren Uhrzeit (die steht in Spalte 20) und dem Code in Spalte 9), der NICHT "127" lautet. Alle anderen Zeilen der Tabelle dürfen gelöscht werden. Somit sollte ich keine Dublikate bzw. Mehrfachnennungen mehr bei den ID's haben, es sollte dann quasi jede ID einmal mit einer Uhrzeit vorhanden sein!
Zur vollständigkeit des voerherigen Verlaufs:
Den weiter oben vorgeschlagenen Code, habe ich jetzt auch nochmal getestet, aber ich glaube wenn ich die Error-Meldung richtig verstehe, passt das jetzt nicht mit der Formatierung der jetztigen "Import-Variante" zusammen.
Vorgeschlagener Code:
Fehler-Meldung:[/b]
Nochmal vielen Dank für die Geduld mit mir, ich hoffe das ich die Antworten jetzt besser formuliere und mit Beispielen erkläre!
Beschreibung: |
Skript, wie ich meine Datei importiert habe als "table". |
|
Download |
Dateiname: |
Matlab_hilfe_Importer_01.m |
Dateigröße: |
2.79 KB |
Heruntergeladen: |
223 mal |
Beschreibung: |
Ausschnitt aus der Datei die zu analysieren ist. |
|
Download |
Dateiname: |
ausschnitt_test_einlesen.zip |
Dateigröße: |
1.23 KB |
Heruntergeladen: |
209 mal |
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 26.11.2018, 13:42
Titel:
|
|
Hallo,
die Zeilen mit 127 kann man vorab entfernen:
Dann bleibt aber bei dem Datensatz hier pro ID nur noch eine Zeile. Ist es im echten Datensatz so, dass die verbleibenden Zeilen nach ID und Uhrzeit sortiert sind?
Falls nicht, würde ich sortieren:
Das Entfernen der überflüssigen Werte kann man dann erledigen, indem man immer mit der Zeile vorher vergleicht.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Barbara_Karl93 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 19.11.18
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.11.2018, 15:29
Titel:
|
|
Hallo,
vielen dank, das funktioniert hervorragend!
Die Daten wären so nicht sotiert, doch dann sind sie es!
Ich habe jetzt folgendes aufgesetzt, doch so ganz funktioniert es nicht.
Ich habe versucht, fortlaufend zwei zeilen mitenander zu vergleichen und die Zeile zu löschen, mit der "kleineren" Zeit, wenn hald die ID gleich ist.
Ich steht gerade auf der Leitung, wo er denn noch klammern will...oder mein Ansatz ist doch komplett falsch??
Fehlermeldung:
Gruß
Barbara
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 26.11.2018, 16:02
Titel:
|
|
Hallo,
statt A(20:n) meinst du vermutlich A(n, 20) bzw. A{n, 20}.
Eine Möglichkeit, Schleifen zu vermeiden, wäre: die Zeiten absteigend sortieren und Zeilen rauszuschmeißen, wenn sie die gleiche ID zur vorherigen haben
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Barbara_Karl93 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 19.11.18
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.11.2018, 14:57
Titel:
|
|
Hallo,
ach das umgedrehte hatte ich auch noch getestet, aber der vorgeschlagene Code funktioniert!
Dankeschön!
Gruß
Barbara
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
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.
|
|