2017-04-15 5 views
-1

Ich habe ein riesigen Daten und dieses Bild zeigt einige Beispiele meiner Daten:Machen Sie eine Kantenliste von Daten

sample of my data

Ich mag eine Kantenliste machen. Wenn der Zeilenwert von column1=column2=column3=column4=column6 gleich ist, gibt es Beziehung Schiff (Kante) zwischen dem Zeilenwert der Spalte 5 Und das Ergebnis sollte wie unten Bild sein:

Result

Gibt es eine Möglichkeit, dies zu tun? Kann postgressSQL oder Python oder R das für mich tun?

Antwort

0

Wenn ich richtig verstehe, Sie selbst wollen beitreten:

select t1.col5 as vertex_1, t2.col5 as vertex_2 
from t t1 join 
    t t2 
    on t1.col1 = t2.col1 and t1.col2 = t2.col2 and t1.col3 = t2.col3 and 
     t1.col4 = t2.col4 and t1.col6 = t2.col6 and 
     t1.col5 <> t2.col5; 

Ich kann nicht sagen, ob Sie ungerichtete oder gerichtete Kanten wollen. Wenn ungerichtet, ändern Sie die letzte Bedingung in: t1.col5 < t2.col5.

+0

Gordon Linoff Großartig Es funktioniert. Könnten Sie bitte bitte den Grund des Schreibens erklären t1.col5

+0

@NeginZarbakhsh. . . Wenn zwei Zeilen übereinstimmen, wenn Sie nur ein Paar in der Ausgabe (A -> B) möchten, verwenden Sie '<'. Wenn Sie beide möchten (A -> B und B -> A), verwenden Sie '<>'. –

0

Was Sie wollen, ist einzigartige Elemente in Ihrer Ergebnisliste. Sehen Sie sich die SQL-Schlüsselwörter "unique"/"distinct" an, sie können wahrscheinlich verwendet werden, um eindeutige Zeilen zu generieren.

+0

@ Ray Ich möchte keine eindeutigen Zeilen generieren. Wie Sie auf dem Bild sehen, sind die Werte einiger Zeilen in 5 Spalten gleich, aber diese Zeilen gleichen Wertes sind in Spalte 4 unterschiedlich. Ich möchte Wege finden, die zunächst diese gleichen Reihen trennen und dann eine Kante zwischen Spalte Nr.5 machen. Wie Sie im zweiten Bild sehen, haben die ersten 6 Zeilen denselben Wert in 5 Spalten, aber ihr Wert in Spalte 5 ist unterschiedlich. Dann sollte es eine Kante zwischen ihnen geben wie Ergebnis Pic –

Verwandte Themen