WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Zeilen einer Tabelle vergleichen mit for-Schleife

 

NoobKaddy
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 18.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.09.2020, 15:00     Titel: Zeilen einer Tabelle vergleichen mit for-Schleife
  Antworten mit Zitat      
Hallo zusammen,

ich habe eine Table mit Uhrzeiten in einer Spalte, manche Uhrzeiten sind doppelt in aufeinanderfolgenden Zeilen und diese Zeilen würde ich gerne mit einer for-Schleife in einem ersten Schritt finden. Wenn es möglich ist, dann würde ich gerne alle gleichen Zeilen finden und nicht nur zwei gleiche Zeilen.

Code:
A = size(E(:,1));

for i = 1:A(:,1)
  s1 = E(i,27);
   s1c = table2cell(s1);
    for j = 2:A(:,1)
         
     
        s2 = E(j,27);
        s2c = table2cell(s2);

 Erg = strcmp(s1c,s2c)

    end
   
end


E ist hierbei die entsprechende Tabelle, die verglichen werden soll. Daher wandele ich das Tabellenformat in ein Cell um, dass strcmp funktioniert.
Leider bleibt bei der Ausführung s1c immer der gleiche Wert (und zwar der letzte, der in der Tabelle vorkommt) und der Vergleich liefert daher nur für den letzten Wert eine 1.

Ich denke mein Fehler liegt unter anderem darin, dass s2c erst ab der zweiten Zeile beginnen darf und nicht auch in der ersten, doch wie bekomme ich das hin?

Gibt es eventuell noch eine andere Möglichkeit Zeilen miteinander zu vergleichen?

Vielen Dank für eure Hilfe!!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.09.2020, 15:13     Titel:
  Antworten mit Zitat      
Hallo,

sind die Uhrzeiten sortiert?
Was ist denn das letztliche Ziel?

Beispielhafter Input und der dafür gewünschte Output wäre hilfreich.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
NoobKaddy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 18.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.09.2020, 15:39     Titel:
  Antworten mit Zitat      
Ich habe eine Beispieltabelle erstellt. Zum Prinzip: ich möchte die Spalte "Name" nach Apfel filtern und dort die Spalten Text1-Text3 ausgegeben bekommen. Manchmal, wenn das Datum von zwei Zeilen gleich ist, soll auch von dieser Zeile die Spalten Text1-Text3 ausgegeben werden.
Daher wollte ich ein Skript schreiben, welches prüft, ob zwei aufeinander folgende Zeilen aus der Spalte Datum gleich sind, um die Zeilen danach eventuell miteinander zu verknüpfen und weiter auszuwerten, aber soweit bin ich noch nicht.

Mir wäre es erstmal wichtig, wenn ich die Zeilen miteinander vergleichen kann und auch weiß, welche Zeilen dann zusammengehören.

Vielen Dank und viele Grüße

Beispiel.m
 Beschreibung:

Download
 Dateiname:  Beispiel.m
 Dateigröße:  638 Bytes
 Heruntergeladen:  238 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.09.2020, 15:56     Titel:
  Antworten mit Zitat      
Hallo,

hast du nun Uhrzeiten oder Datums, die anscheinend ganze Zahlen sind?

Ich würde dringend table als Variablenname vermeiden, da es eine gleichnamige Funktion gibt, die du noch dazu in der selben Zeile verwendest.

Zitat:
Daher wollte ich ein Skript schreiben, welches prüft, ob zwei aufeinander folgende Zeilen aus der Spalte Datum gleich sind

Das geht ohne jegliche Schleifen:
Code:
diff(tbl.Datum) == 0


Zitat:
um die Zeilen danach eventuell miteinander zu verknüpfen und weiter auszuwerten, aber soweit bin ich noch nicht.

Dazu würde ich findgroups / splitapply verwenden. Das funktioniert auch, wenn Zeilen mit gleichem Datum nicht direkt aufeinander folgen.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
NoobKaddy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 18.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2020, 08:44     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe ganze Daten mit Tag und Uhrzeit, aber ich dachte, dass man es zuerst vereinfachend so versuchen kann.
Mit diff kann ich nun die einzelnen Zeilen vergleichen und zuordnen. Mit splitapply komme ich jedoch nicht weiter, da in den Beispielen als func mean verwendet wird, ich möchte jedoch keinen Mittelwert, sondern ich möchte, dass, wenn ein Wert in diff 1 ist, bestimmte andere Zeilen in der Tabelle zusammengefasst werden.

Gibt es eventuell die Möglichkeit, wenn diff 1 ist, dass dann Apfel aus der ersten Zeile auch in die zweite Zeile kopiert wird? Dies soll jedoch am Ende nicht nur mit dem Begriff Apfel geschehen sondern mit egal welchem Wort, hauptsache die Zelle wird kopiert.

Danke und viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.09.2020, 09:22     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
ich habe ganze Daten mit Tag und Uhrzeit, aber ich dachte, dass man es zuerst vereinfachend so versuchen kann.

Wenn man zu stark vereinfacht, lässt sich der Ansatz oft nicht auf die echte Situation übertragen und man fängt im Grunde nochmal von vorne an. Das ist sehr ineffizient. Beispiele sollten also gerne vereinfachend sein, aber die wesentlichen Eigenschaften der tatsächlichen Anwendung behalten. Es ist ein großer Unterschied, ob mit Datumsangaben oder Zahlen gearbeitet wird.

Zitat:
da in den Beispielen als func mean verwendet wird

Das sind Beispiele. Statt mean kannst du auch andere fertige oder selbstgeschriebene Funktionen verwenden.

Zitat:
Gibt es eventuell die Möglichkeit, wenn diff 1 ist, dass dann Apfel aus der ersten Zeile auch in die zweite Zeile kopiert wird? Dies soll jedoch am Ende nicht nur mit dem Begriff Apfel geschehen sondern mit egal welchem Wort, hauptsache die Zelle wird kopiert.

Code:
identical = diff(tbl.Datum) == 0;
tbl.Name([false; identical]) = tbl.Name(identical)


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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
NoobKaddy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 18.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2020, 11:13     Titel:
  Antworten mit Zitat      
Hallo Harald,

du hast leider recht. Für mein Beispiel funktioniert die Übertragung der einzelnen Zellen in die folgenden, für meine große Tabelle wird immer nur die darauffolgende Zelle einbezogen, nicht aber die übernächste. Ich versuche dieses Problem nun über eine Schleife noch zu lösen.

Danke und viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.09.2020, 12:35     Titel:
  Antworten mit Zitat      
Hallo,

das ist sicher über eine Schleife lösbar. Man sollte sich aber angewöhnen, unnötige Schleifen zu vermeiden.

Für weitere Unterstützung bitte folgendes beantworten:
* Sind die Datumsangaben denn nun sortiert, bzw. sind die Daten für gleiche Datumsangaben immer in aufeinanderfolgenden Zeilen?
* Gibt es zu Zeilen von einem Datum immer genau einen nicht-leeren Namen?
* Steht dieser Name immer in der ersten der Zeilen von einem Datum?

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 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.