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

Funktion Fehlerhafte Datenwerte mit vorherigen Wert ersetzen

 

popoff_1
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 11.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2020, 16:31     Titel: Funktion Fehlerhafte Datenwerte mit vorherigen Wert ersetzen
  Antworten mit Zitat      
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

 



Fehler:
Undefined operator '==' for input arguments of type 'table'.

Error in resolve_data (line 13)
if ((data_out_resolved(r , c) == error_number)&&(r==1)) % if the first value is bad, you need to
take a later number

Verstehe nicht ganz wo der Fehler liegt. Hat jmd. einen Tipp? Hab lange an den Skript herumgebastelt aber langsam liegen meine Nerven blank :/
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

wenn du auf den Inhalt eines Tables zugreifen willst, dann {r,c} statt mit ( ).

Deutlich leichter geht das mit fillmissing:

Code:
T = array2table([2, 40; 40, 4; 40, 40; 5, 6])

missing = table2array(T) == 40;
T = fillmissing(T, "previous", 'MissingLocations', missing)
missing = table2array(T) == 40; % was fehlt immer noch?
T = fillmissing(T, "next", 'MissingLocations', missing)


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 11.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2020, 18:39     Titel:
  Antworten mit Zitat      
Ok super jetzt passts.

Aber wenn ich nun meine Daten plotten möchte kommt dieser Fehler:
Code:
Error using tabular/plot (line 217)
Tables and timetables do not have a plot method. To plot 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.


Ich muss hier nun anscheinend den Befehl stackedplot verwenden. Wieso dass nun?

thx
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 11.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2020, 08:12     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

wenn du auf den Inhalt eines Tables zugreifen willst, dann {r,c} statt mit ( ).

Deutlich leichter geht das mit fillmissing:

Code:
T = array2table([2, 40; 40, 4; 40, 40; 5, 6])

missing = table2array(T) == 40;
T = fillmissing(T, "previous", 'MissingLocations', missing)
missing = table2array(T) == 40; % was fehlt immer noch?
T = fillmissing(T, "next", 'MissingLocations', missing)


Grüße,
Harald


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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

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)


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.