mir liegt gegenwärtig eine Excel-Tabelle vor, welche eine Vielzahl an Daten beinhaltet. Besagte Daten verstecken sich jedoch zwischen noch weitaus zahlreicheren "NA"-Angaben. Aus diesem Grund möchte ich gerne die mich störenden "NA"-Strings entfernen, so dass nur noch die Daten-Strings übrig bleiben. Des Weiteren möchte ich - nachdem die "NA"-Strings entfernt worden sind - dass die verbleibenden Daten-Strings nach links gerückt werden.
Zur besseren Illustration habe ich eine beispielhafte Excel-Datei angehängt, bei welcher das erste Tabellenblatt ("Tabelle1") den ungeordneten IST-Zustand markiert und das zweite Tabellenblatt ("Tabelle2") den reduzierten und nach links verrückten SOLL-Zustand darstellt.
Folgenden Code habe ich bereits anzubieten:
Code:
% Einlesen der Excel-Datei im Rohformat [~, ~, cRaw1] = xlsread('Beispiel.xlsx', 'Tabelle1');
% Suchen und entfernen des Strings NA
cRawKomplett(strcmp(cRawKomplett(2:end, 2:end), 'NA')) = [];
ich würde mit einer for-Schleife über die Zeilen arbeiten.
Wenn die Matrixstruktur erhalten bleiben soll, was soll dann in den in Excel leeren Zellen stehen?
Leider habe ich als Anfänger mit einer for-Schleife (oder ganz allgemein mit Schleifen) noch nicht gearbeitet. Soeben habe ich mir zwar - um ein gewisses Verständnis zu erwerben - einige for-Schleifen angesehen. Im Vergleich zu der hier wohl folgenden, erschienen mir die betrachteten Schleifen jedoch als eher einfach dargestellt.
Unabhängig davon hätte ich diese for-Schleife hier zunächst wie folgt formuliert...:
Code:
for Laufvariable = 2:10
Raw(strcmp(Raw(Laufvariable, 2:end), 'NA')) = [];
end
Da sich die relevante Variable jedoch abermals sehr zum Negativen (extrem viele Spalten, eine Zeile) verändert hat, ist mein Versuch nicht ausreichend/fehlerhaft gewesen.
Die Matrixstruktur kann (und sollte!) sich in der Breite verkleinern. Wenn jedoch die leeren Zellen gefüllt werden müssen (um auf das Niveau der Zelle mit den meisten Daten zu gelangen), so wäre dies wohl ebenfalls über die Anzeige von "NA" oder "NaN" sinnvoll.
% Move everything but 'NA' to front for k = 2:size(Raw, 1)
currentContent = Raw(k, 2:end);
toKeep = ~strcmp(currentContent, 'NA');
Raw(k, 2:end) = [currentContent(toKeep), currentContent(~toKeep)];
end
% Remove columns with 'NA' only
toRemove = all(strcmp(Raw(2:end, :), 'NA'));
Raw(:, toRemove) = [];
Herzlichen Dank für den Code sowie für den Hinweis, Harald!
Den von dir dargestellten Inhalt hätte ich mit meinem bisherigen Wissen nicht einmal im Ansatz verwirklichen können.
Viele Grüße
DasFragezeichen
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.