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

Zeilen anhand von zugehörigen Spalteninformationen löschen

 

Senraphil

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2014, 15:59     Titel: Zeilen anhand von zugehörigen Spalteninformationen löschen
  Antworten mit Zitat      
Hallo liebe Gemeinde,

ich habe folgendes Problem:

Meine Datensatz besteht aus etwa 500 zeilen und 10 Spalten.
In manchen Zeilen steht in den den entsprechenden Spalten ein "NaN". Wenn das der Fall ist möchte ich diese Zeielen aus meinem Datensatz löschen. Wie kann ich das anstellen?

Zur Verdeutlichung ein Beispiel:

Code:

1       2       3      4       5       6
2       3       4      5     NaN     7
3       4       5    NaN     6       7
4       5       6      7       8       9
5       6       7      8     NaN     9
Das ist die Ausgangsdaten.

Nun sollen diejenigen Zeilen gelöscht werden, bei denen in der Spalte 4 und 5 ein "NaN" steht. Also soll es danach so aussehen:

Code:

1     2     3     4     5     6
4     5     6     7     8     9
Wie kann ich das sinnvoll und automatisch umsetzen lassen?

Ich hoffe ihr könnt mir helfen.

Gruß
[/code]Senraphil


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.04.2014, 16:08     Titel:
  Antworten mit Zitat      
Hallo
in der Kombination von ISNAN und ANY
so z.B:
Code:

A=[ 1       2       3      4       5       6
2       3       4      5     NaN     7
3       4       5    NaN     6       7
4       5       6      7       8       9
5       6       7      8     NaN     9]

pos_nan = isnan(A)
A(any(pos_nan, 2),:)= []

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Senraphil

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2014, 09:29     Titel:
  Antworten mit Zitat      
Hallo,

vielen Dank an denny für die schnelle Antwort. Funktioniert auch super Smile

Allerdings habe ich ein weiteres Problem festgestellt:

Die Bestimmung der "NaN" darf nur in bestimmten Spalten erfolgen und dann auch nur die Zeilen gelöscht werden, wo in den ausschlaggebenden Spalten auch ein "NaN" steht. Denn ich habe eine Spalte, in der nur "NaN" steht, da dies eine Text-Spalte ist.

Deshalb ein genaueres Beispiel meines Datensatzes, um die Problematik besser darzustellen:

Code:

A =

     1     2     3   NaN   5     6     7     8   NaN    10
     1     2     3     4     5     6     7     8   NaN    10
     1     2     3     4   NaN   6     7     8   NaN    10
     1     2     3   NaN   5     6     7     8   NaN    10
     1     2     3     4     5   NaN   7     8   NaN    10
     1     2   NaN   4     5     6     7     8   NaN    10
     1     2     3     4     5     6   NaN   8   NaN    10
     1     2     3     4     5     6     7     8   NaN    10
     1     2     3     4   NaN   6     7     8   NaN    10

Das ist die Struktur meines Datensatzes. Jetzt möchte ich diejenigen Zeilen löschen, bei denen in den Spalten !!3-7!! ein "NaN" steht. Spalte neun soll nicht berücksichtigt werden, da sonst die komplette Matrix leer ist. Weiterhin sollen die erste und die letzte Zeile unbedingt erhalten bleiben, auch wenn sie nach meiner Bedingung eigentlich gelöscht werden müssten.

Am Ende soll die Matrix so aussehen:

A =

     1     2     3   NaN   5     6     7     8   NaN    10
     1     2     3     4     5     6     7     8   NaN    10
     1     2     3     4     5     6     7     8   NaN    10
     1     2     3     4   NaN   6     7     8   NaN    10


Die erste und letze Zeile bleiben trotz "NaN" in den betroffenen Spalten bestehen. Die restlichen, dazwischen liegenden Zeilen werden gelöscht.

Ich hoffe ihr versteht, was ich meine und könnt mir weiterhelfen.

Vielen Dank.
Senraphil
 
Senraphil
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 16.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2014, 10:14     Titel:
  Antworten mit Zitat      
Hallo,

ich hab mich jetzt mal registriert, da ich gemerkt hab, dass in meiner letzten Antwort einige Fehler enthalten sind und ich diesen Beitrag leider nicht mehr bearbeiten konnte. Ich bin somit der Gast, der diesen Thread geöffnet hat.

Nochmals zu meinem Datensatz. Die Struktur sieht wie folgt aus:

Code:

A =

     1   NaN   NaN   NaN   NaN   NaN    7     8   NaN    10
     1     2       3       4     NaN     6      7     8   NaN    10
     1     2       3     NaN     5       6      7     8   NaN    10
     1   NaN   NaN   NaN   NaN   NaN    7     8   NaN    10
     1     2       3       4       5     NaN    7     8   NaN    10
     1     2     NaN     4       5       6      7     8   NaN    10
     1   NaN     3       4       5       6      7     8   NaN    10
     1     2       3       4       5       6      7     8   NaN    10
     1   NaN   NaN   NaN   NaN   NaN    7     8   NaN    10


Jetzt möchte ich, dass alle ZEILEN gelöscht werden, bei denen jeweils in den SPALTEN !!2-6!! ein "NaN" steht. Das bedeutet, dass in jeder Spalte der Spalten 2-6 ein "NaN" stehen muss (so wie in Zeile 4!). Steht beispielsweise nur in Spalte 5 ein "NaN" (vergleiche Zeile 2) soll die komplette Zeile erhalten bleiben. NICHT betrachtet werden soll SPALTE 9, da dort immer nur "NaN" vorkommt. Weiterhin sollen die erste und die letzte ZEILE unbedingt erhalten bleiben.

Das Resultat soll dann wie folgt aussehen:
Code:

A =

     1   NaN   NaN   NaN   NaN   NaN     7     8   NaN    10
     1     2       3       4     NaN     6       7     8   NaN    10
     1     2       3     NaN     5       6       7     8   NaN    10
     1     2       3       4       5     NaN     7     8   NaN    10
     1     2     NaN     4       5       6       7     8   NaN    10
     1   NaN     3       4       5       6       7     8   NaN    10
     1     2       3       4       5       6       7     8   NaN    10
     1   NaN   NaN   NaN   NaN   NaN     7     8   NaN    10


Aus der ursprünglichen Daten wurde nur die 4. Zeile entfernt, da dort die Bedingung erfüllt war, dass in allen SPALTEN 2-6 ein "NaN" steht.

Ich hoffe,dass meine Problem jetzt besser verständlich ist und mir jemand weiterhelfen kann.

Vielen Dank.
Gruß Senraphil
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.04.2014, 11:42     Titel:
  Antworten mit Zitat      
Hallo,

wenn ein Vorschlag gemacht wird, muss er nicht unbedingt immer gleich haargenau funktionieren - vor allem natürlich dann nicht, wenn sich die Problemstellung noch ändert.
Man sollte aber versuchen, den Ansatz zu verstehen und dann auf das tatsächliche Problem anzupassen.

Hier für diesen Fall, inkl. Kommentaren:
Code:
pos_nan = isnan(A(2:end-1,2:6)); % erste Zeile und letzte Zeile nicht untersuchen, nur 2.-6. Spalte
remove = all(pos_nan, 2);        % Zeilen mit ausschließlich NaN bestimmen
remove = [false; remove; false]; % Die erste und letzte Zeile sollen immer bestehen bleiben
 A(remove,:)= []; % zu entfernende Zeilen löschen


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Senraphil
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 16.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2014, 12:48     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine Hilfe. Deine Lösung funktioniert angewendet auf meinem Datensatz tadellos. Nochmals vielen Dank.

Gruß
Senraphil
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 - 2025 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.