2016-06-12 27 views
0

私は、人々のリストとそれが動作する場所の対応する緯度座標を含むデータフレームを持っています。基本的には、元のデータフレーム内の各個人と他のすべての人との距離を示すエッジリストを表す新しいデータフレームを作成したいと考えています。私は距離を計算する方法を知っていますが、forループで苦労しています。すべての可能な組み合わせのエッジリストを作成する

オリジナルデータフレームは、この(COORD =タプル)のようになります。これは、私は簡単に距離を計算することができますソートされたら

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 

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

が、私はこのような新しいデータフレームを生成する必要があります。

私は2つのネストされたforループを使用してこれを作成しようとしましたが、私のcbind、rbindsが詰まっています。

+0

を使用して:: spDist() – mdsumner

答えて

1

はここでこれは私が提供タプルの例で動作setNameswithを使用してベースソリューションですし、その後、SPを参照してください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

。ただし、座標データはタプルではなくデータフレームとして保存されています。私は努力し続けます。迅速な応答ありがとう! – user2995175

+0

私のデータフレームの構造は次の通りです: クラス 'tbl_df'と 'data.frame':18 obs。 2つの変数: $ name:chr "Erik" "Datha" "Tom" "Valerie" ... $ coordinate: 'data.frame':18 obs。 2変数のうち .. $ lon:num 147 153 147 147 147 ... .. $ lat:num -42.9 -27.5 -42.9 -42.9 -42.9 ... – user2995175

+0

try dput(head(your_data、n = 20) ))それは、jalapicは動作しますが、あなたが距離を把握できるようにあなたが望むと言ったことをしていますが、物事を改善するならば。 setNamesはdfだけでなくベクトル(おそらくあなたの 'タプル')にも適用されます。 – Chris

関連する問題