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

Vergleich und Zusammenfügen von Tabellen-Spalten

 

Ciotic
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 10.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2018, 17:19     Titel: Vergleich und Zusammenfügen von Tabellen-Spalten
  Antworten mit Zitat      
Hallo zusammen,

ich sitze vor folgendem Problem und komme nicht so recht weiter:

Gegeben sind zwei Tabellen

Code:
A = [A80 3.123 3.112 3.114; A124 2.134 2.144 2.134; A101 4.134 4.123 4.234]
B = [A101 3.123 3.112 3.114; A80 2.134 2.144 2.134; A124 4.134 4.123 4.234]
 


Nun sollen beide Tabellen zu einer Tabelle zusammengefasst werden. Die erste Spalte ist jeweils die Bauteil Bezeichnung. Die letzten 3 Spalten der Tabelle B sollen, wenn das Bauteil übereinstimmt, an die Tabelle A angehängt werden. Das Ergebnis soll also wie folgt aussehen:

Code:
Neu = [A80 3.123 3.112 3.114 2.134 2.144 2.134; A124 2.134 2.144 2.134 4.134 4.123 4.234; A101 4.134 4.123 4.234 3.123 3.112 3.114]  


Die Reihenfolge, in der die Bauteile auftauchen ist bei beiden Tabellen unterschiedlich. Zudem kann es vorkommen, dass in A ein Bauteil steht, was in B nicht auftaucht. Mein Vorgehen wäre nun, die Tabellen aufsteigend zu sortieren und dann die Tabellen zeilenweise zu vergleich. Nur wie setzte ich das in Matlab um?

Ich bin für jede Hilfe dankbar!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.02.2018, 23:07     Titel:
  Antworten mit Zitat      
Hallo,

in welcher Form sind die Tabellen denn gegeben?
Als Cell Arrays, Tables, ganz was anderes?

ismember dürfte helfen, und bei Tables gibt es join , innerjoin und outerjoin .

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ciotic
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 10.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2018, 12:55     Titel:
  Antworten mit Zitat      
Hi,

danke für deine Antwort. Die Tabellen sind als Cell Arrays gegeben. Da kann ich aber leicht tables draus machen.

ismember bringt mich leider auch nicht weiter. Über
Code:
ismember(A(:,'Bauteil'),B(:,'Bauteil'));
kann ich zeilenweise prüfen, ob das Bauteil von B auch in der gleichen Zeile von A vorkommt.

Da meine Bauteile aber nicht in den gleichen Zeilen sind, trifft das bei mir leider nie zu.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.02.2018, 13:00     Titel:
  Antworten mit Zitat      
Hallo,

wenn, dann schon
Code:
ismember(A{:,'Bauteil'},B{:,'Bauteil'})

oder auch
Code:
ismember(A.Bauteil,B.Bauteil)


Und wie gesagt:
Zitat:
bei Tables gibt es join , innerjoin und outerjoin .


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ciotic
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 10.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2018, 13:25     Titel:
  Antworten mit Zitat      
Das löst aber mein Problem leider nicht, da die Funktion nur prüft, ob in Zeile n der Wert der Spalte "Bauteil" von Table B mit dem Wert der Spalte "Bauteil" von Tale A übereinstimmt. Bei meinen Tabellen sind die Bauteile aber in verschiedenen Zeilen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.02.2018, 14:47     Titel:
  Antworten mit Zitat      
Hallo,

du brauchst das zweite Rückgabeargument von ismember.
Außerdem musst du wohl die Eingabeargumente vertauschen.

Leichter dürfte eine der join-Varianten sein. Hast du das denn mal versucht?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ciotic
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 10.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2018, 17:01     Titel:
  Antworten mit Zitat      
Hi,

danke für das Nachhaken, die join Funktionen hatte ich noch nicht versucht.

Dabei hat ein einfaches
Code:
Neu = outerjoin(A,B)
mein Problem gelöst. Es kann so einfach sein.
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.