Hi, ich habe eine Datentabelle mit zwei Spalten. Immer wenn der Wert 40 dort vorkommt soll dieser Wert gelöscht werden und der vorherige Wert eingesetzt werden.
Ich habe dies mittels einer function versucht zu lösen:
Allerdings kommt bei mir immer ein Fehler.
Code:
function[ data_out_resolved ] = resolve_data ( data_out_raw, error_number ) % if a error value is in the measurement, this needs to be deleted % and filled with the nearest good value
le= size(data_out_raw,1); % find out length of my matrix
% Transfer all data
data_out_resolved = data_out_raw; % just broken data will be replaced
for c = 1:2% loop for column number for r = 1:1:le % loop for row number if((data_out_resolved(r , c) == error_number)&&(r==1))% if the first value is bad, you need to take a later number
n=2; % start to count @2 -> you start to search for proper numbers there while(data_out_resolved(1 , c) == error_number)% later number also can be bad -> search on until a proper number shows up
data_out_resolved(1 , c) = data_out_resolved(n , c); % load later value
n = n+1; % increment counting value end elseif(data_out_resolved(r , c) == error_number)% later digits -> row <1
data_out_resolved(r , c) = data_out_resolved((r-1) , c); % previous (good) value can be taken for broken ones end end end
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 ;)
Aber wenn ich nun meine Daten plotten möchte kommt dieser Fehler:
Code:
Error using tabular/plot(line217)
Tables and timetables do not have a plot method. Toplot a table or a timetable, use the stackedplot function. As an alternative,
extract table or timetable variables using dot or brace subscripting, and then pass the variables as input arguments to the plot function.
du kannst stackedplot verwenden, musst aber nicht. Das sagt ja der zweite Teil der Meldung:
Wenn du Inhalte eines Tables haben willst, musst du immer mit { } statt ( ) indizieren. Für einzelne Spalten würde ich die Syntax T.Spalte empfehlen.
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 ;)
Eine Frage noch: Ich habe nun keine table mehr sondern den Datentyp Double. Da funkioniert der Obige Code nicht mehr. Kann ich den Code modifizieren damit er auch mit Double Datentypen funktioniert?
ja, im Zweifelsfall einfach ausprobieren. :) Das vereinfacht das ganze sogar:
Code:
T = [2, 40; 40, 4; 40, 40; 5, 6]
missing = T == 40;
T = fillmissing(T, "previous", 'MissingLocations', missing)
missing = T == 40; % was fehlt immer noch?
T = fillmissing(T, "next", 'MissingLocations', missing)
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 ;)
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
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.