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

Prüfe Tabellenwerte auf mehrere Kriterien in anderer Tabell

 

carpediem

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2019, 16:55     Titel: Prüfe Tabellenwerte auf mehrere Kriterien in anderer Tabell
  Antworten mit Zitat      
Hallo zusammen,

ich möchte zwei Tabellen mit unterschiedlichen Dimensionen auf mehrere Kriterien miteinander vergleichen und, bei positiver Übereinstimmung, einen Ausgabewert "tbl.result" erhalten.

Die Tabelle tbl soll für jede Zeile ihre Werte aus der Tabelle data abfragen. Dabei müssen die Werte "date", "time" und "critA" aus den Tabellen tbl und data zwingend miteinander übereinstimmen. "critA" muss zudem den Wert 1 aufweisen.

Bedingungen im Überblick:
Code:

Code:
tbl.time == data.time

Code:
tbl.critA == data.critA == 1



Sind die o.g. Kriterien erfüllt, soll die Ausgabe von tbl.result nach folgenden Kriterien erfolgen:
if tbl.critB >= data.critB; then critC
if tbl.critB < data.critB; then tbl.critB - data.critC (row-1)

Sind die o.g. drei Kriterien in mindestens einem Punkt nicht erfüllt, sei die Ausgabe 0.


Beispiel-Ergebnisse der ersten vier Werte für tbl.result:
Code:
[0; 23; 10; 0]




Mein Ansatz war über eine for-Schleife mit
Code:
if tbl.date == data.date && tbl.time == data.time && ...
, was leider nicht geklappt hat.

Würde mich sehr über eure Hilfe freuen Smile
Danke!

matlab.mat
 Beschreibung:

Download
 Dateiname:  matlab.mat
 Dateigröße:  609.97 KB
 Heruntergeladen:  300 mal


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.455
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.07.2019, 19:26     Titel:
  Antworten mit Zitat      
Hallo,

bitte gib vollständig an, was du versucht hast und was genau daran nicht funktioniert hat.

Sind beide Datensätze sortiert? Gibt es im zweiten Datensatz immer genau eine Zeile, die die Kriterien erfüllt? Wenn nicht, welche soll für die Berechnung verwendet werden?

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
 
carpediem

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2019, 10:37     Titel:
  Antworten mit Zitat      
Mein Code ist wie folgt:
Code:
tbl.result = zeros (height (tbl),1);

for row = 1:height (tbl)
    if tbl.date == data.date && tbl.time == data.time && tbl.critA == data.critA == 1
        if tbl.critB >= data.critB
            tbl.result = tbl.result + data.critC;
        else %tbl.critB < data.critB
            tbl.result = tbl.result + (tbl.critB - data.critC (row-1));
        end
    end
end

clear row
 


Ich bekomme die Fehlermeldung: "Data inputs must be the same size, or any of them can be a scalar."
 
carpediem

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2019, 10:52     Titel:
  Antworten mit Zitat      
Sind beide Datensätze sortiert?
Ja, die Datensätze sind sortiert über den Befehl
Code:

data = sortrows (data, {'date', 'time', 'pos'},{'ascend', 'ascend', 'ascend'});
tbl = sortrows ((tbl, {'date', 'time', 'number'},{'ascend', 'ascend', 'ascend'});
 


Gibt es im zweiten Datensatz immer genau eine Zeile, die die Kriterien erfüllt?
Es gibt max. genau eine Zeile, welche die Bedingungen erfüllt. Entscheidend hierfür ist critA, welches == 1 sein muss.

Wenn nicht, welche soll für die Berechnung verwendet werden?
Sofern critA ~= 1, kann die weitere Prüfung abgebrochen werden und es gilt tbl.result == 0.
 
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.