Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Studierende:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Frühester Datensatz je Gruppe in neue Tabelle lesen

 

soulid
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 05.10.14
Wohnort: NRW
Version: ---
     Beitrag Verfasst am: 31.12.2019, 10:40     Titel: Frühester Datensatz je Gruppe in neue Tabelle lesen
  Antworten mit Zitat      
Moin,
ich habe einige CSV Daten als Table eingelesen und so modifiziert dass das Datum in der ersten Spalte steht.

Code:
PlantData = table(dataArray{1:end-1}, 'VariableNames', {'Machine','Timestamp','SER','ROT'});
PlantData=PlantData(:,[2 1 3);
 


Timestamp Machine SER
____________________ _____________ ___________________

12/1/2019 3:24:8 PM "2" "KM19795"
12/1/2019 3:28:7 PM "2" "KM14321"
12/1/2019 3:32:57 PM "2" "KM20262"
12/1/2019 3:35:50 PM "2" "KM20262"

Ich habe die Duplikate der SER Spalte gruppiert und in die Tabelle GroupDuplicates überführt.

Code:
GroupDuplicates = findgroups(PlantData.SER,:);


Nun möchte ich innerhalb der jeweiligen Gruppe die gesamte Zeile der frühesten Daten (also min Timestamp) in eine separates table überführen...ich habe keinen blassen Dunst wie.

Kann mir hier jemand helfen- jede Hilfe ist willkommen
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 20.820
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 31.12.2019, 11:31     Titel:
  Antworten mit Zitat      
Hallo,

du hast doch schon eine sehr ähnliche Frage gestellt. Dort hatte ich dich auch auf splitapply hingewiesen. Du kannst auf Datumsangaben Funktionen wie min oder max anwenden.

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
 
soulid
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 05.10.14
Wohnort: NRW
Version: ---
     Beitrag Verfasst am: 31.12.2019, 14:26     Titel:
  Antworten mit Zitat      
Ich habe mit
Code:
Earliest=splitapply(@max,PlantData.Timestamp,GroupDuplicates);

die Daten (mehrzahl von Datum) extrahiert. Die Tabelle ist nun kleiner als die Quelltabelle- logisch.
Jetzt muss ich noch die Daten aus PlantData in die Earliest Tabelle zusammenführen oder wahlweise in der PlantData Tabelle löschen..

Mit
Code:
PlantData1=PlantData([Earliest],:)

bekomme ich die Fehlermeldung
Code:
A table row subscript must be a numeric array containing real positive
integers, a logical array, a character vector, a string array, or a cell
array of character vectors.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 20.820
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 01.01.2020, 19:48     Titel:
  Antworten mit Zitat      
Hallo,

wie wäre etwas in der Art?
Code:
Earliest=splitapply(@(x) x(x.TimeStamp == max(x.TimeStamp),:) ,PlantData, GroupDuplicates);


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
 
soulid
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 05.10.14
Wohnort: NRW
Version: ---
     Beitrag Verfasst am: 01.01.2020, 21:16     Titel:
  Antworten mit Zitat      
Hallo Harald,
Danke für Deine Hilfestellung. Ich habe diese Zeile ausprobiert und folgenden Fehlermeldung bekommen:
Code:
Error using splitapply (line 132)
Applying the function
'@(x)x(x.TimeStamp==max(x.TimeStamp),:)' to the 1st group of
data generated the following error:

Too many input arguments.


Ich weiß leider mit der Fehlermeldung nichts anzufangen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 20.820
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 01.01.2020, 21:20     Titel:
  Antworten mit Zitat      
Hallo,

sorry, Denkfehler meinerseits. Eher so:
Code:
Earliest=splitapply(@myfun ,PlantData, GroupDuplicates);
 

mit
Code:
function y = myfun(x)
[~, idx] = max(x.TimeStamp);
y = x(idx, :);


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
 
soulid
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 05.10.14
Wohnort: NRW
Version: ---
     Beitrag Verfasst am: 02.01.2020, 10:34     Titel:
  Antworten mit Zitat      
Guten Morgen Harald,
ich habe den Vorschlag ausprobiert.

In die myfun.m habe ich dies eingefügt (das "end" habe ich noch selber eingefügt)
Code:
function y = myfun(x)
[~, idx] = max(x.Timestamp);
 y = x(idx, :);
end


Dann
Code:
Earliest=splitapply(@myfun ,PlantData, GroupDuplicates);
aufgerufen und folgende Meldung zurückbekommen
Code:
>> Earliest=splitapply(@myfun ,PlantData, GroupDuplicates);
Error using splitapply (line 132)
Applying the function 'myfun' to the 1st group of data generated the following error:

Too many input arguments.


Daraufhin habe ich die Function allein ausgeführt um zu sehen wo es hakt.
Code:
>> myf=myfun(PlantData);

Heraus kommt der allerletzte Datensatz sortiert nach Timestamp-->Mit allen Spalten. Das ist gut!

Ich vermute das die Daten nicht sauber in "Earliest" zurückgeschrieben werden. Trotzdem komme ich aus der Fehlermeldung nicht raus.

P.S. Ich benutze R2018b
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 20.820
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 02.01.2020, 10:43     Titel:
  Antworten mit Zitat      
Hallo,

stelle bitte ein Datenbeispiel zur Verfügung, das man möglichst direkt verwenden kann. Bis jetzt habe ich das als Trockenübung versucht, und so kommen wir wohl nicht weiter.

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
 
soulid
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 05.10.14
Wohnort: NRW
Version: ---
     Beitrag Verfasst am: 02.01.2020, 13:02     Titel:
  Antworten mit Zitat      
Hallo Harald,
anbei die .mat Datei der Daten nach meinem Importscript und der Kategorisierung.

Danke für Deine Hilfe im voraus!

PlantData.mat
 Beschreibung:

Download
 Dateiname:  PlantData.mat
 Dateigröße:  111.46 KB
 Heruntergeladen:  5 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 20.820
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 02.01.2020, 13:37     Titel:
  Antworten mit Zitat      
Hallo,

MATLAB scheint den Table in mehrere Variablen aufzuspalten. Mit dieser Funktion klappt es:
Code:
function y = myfun(Timestamp, VIN, GroupDuplicates, BatteryVoltage)
[~, idx] = max(Timestamp);
 y = table(Timestamp, VIN, GroupDuplicates, BatteryVoltage);
 y = y(idx, :);


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
 
soulid
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 05.10.14
Wohnort: NRW
Version: ---
     Beitrag Verfasst am: 02.01.2020, 14:24     Titel:
  Antworten mit Zitat      
Ahhhh- Wahnsinn! Das funktioniert!!!

Danke für Deine Hilfe!!!
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2020 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.