2016-06-12 12 views
0

Ich habe einen Datenrahmen, der eine Liste von Personen und entsprechende Breitenkoordinaten enthält, wo sie arbeiten. Im Wesentlichen möchte ich einen neuen Datenrahmen erstellen, der eine Kantenliste darstellt, die die Entfernung zwischen jeder Person und allen anderen im ursprünglichen Datenrahmen zeigt. Ich weiß, wie man Distanz berechnet, aber ich kämpfe mit meinen for-Schleifen.Erstelle eine Editierliste aller möglichen Kombinationen.

Original-Datenrahmen sieht wie folgt aus (coord = Tupel):

name, coord 
Bob -30, 142 
Jack 32, 3 
Alfred 40, - 116 

ich neue Datenrahmen wie diese erzeugen müssen:

from, to, from_coord, to_coord 
Bob, Bob, -30, 142, -30, 142 
Bob, Jack, -30, 142, 32, 3 
Bob, Alfred, -30, 142, 40, -116 
Jack, Jack 32, 3, 32, 3 
Jack, Alfred 32, 3, 40, -116 
Alfred, Alfred 40, -116, 40, -116 

Sobald diese sortiert ich leicht Entfernung berechnen kann.

Ich habe versucht, mit zwei verschachtelten For-Schleifen, um dies zu erstellen, aber stopfen meine Cbind, rbinds.

+0

See sp :: spDist() – mdsumner

Antwort

1

Hier ist eine Lösung mit Basis setNames und with und dann mit expand.grid

x <- with(df, setNames(name, coord)) 
x1 <- cbind(expand.grid(x,x),expand.grid(names(x),names(x))) 
colnames(x1)<-c("from","to","from_coord","to_coord") 

    from  to from_coord to_coord 
1 Bob Bob -30, 142 -30, 142 
2 Jack Bob  32, 3 -30, 142 
3 Alfred Bob 40, -116 -30, 142 
4 Bob Jack -30, 142 32, 3 
5 Jack Jack  32, 3 32, 3 
6 Alfred Jack 40, -116 32, 3 
7 Bob Alfred -30, 142 40, -116 
8 Jack Alfred  32, 3 40, -116 
9 Alfred Alfred 40, -116 40, -116 
+0

Dieser mit Tupel Beispiel funktioniert I zur Verfügung gestellt. Ich bemerke jedoch, dass die Koordinatendaten als Datenrahmen nicht als Tupel gespeichert sind. Ich werde es weiter versuchen. Danke für die schnelle Antwort! – user2995175

+0

Die Struktur meines Datenrahmens ist wie folgt: Klassen 'tbl_df' und 'data.frame': 18 obs. von 2 Variablen: $ name: chr "Erik" "Datha" "Tom" "Valerie" ... $ koordinate: 'data.frame': 18 obs. von 2 Variablen: .. $ lon: num 147 153 147 147 147 ... .. $ lat: num -42.9 -27.5 -42.9 -42.9 -42.9 ... – user2995175

+0

versuchen dput (head (your_data, n = 20)) wenn es die Dinge verbessern würde, obwohl Jalapik funktioniert und macht, was du gesagt hast, du willst, wie du die Entfernung ausmachen kannst. setNames bezieht sich auf Vektoren (vielleicht Ihre 'Tupel') sowie df. – Chris

Verwandte Themen