2016-06-12 61 views
0

我有一個數據框,其中包含人員列表以及他們工作的相應緯度座標。基本上,我想創建一個新的數據框,表示顯示每個人與原始數據框中所有其他人之間距離的邊緣列表。我知道如何計算距離,但我正在爲我的for循環掙扎。創建所有可能組合的邊界列表

原始數據幀看起來像這樣(座標=元組):

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

我需要生成這樣新的數據幀:一旦這被排序我可以很容易地計算距離

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 

我試着使用兩個嵌套for循環來創建這個,但我填充我的cbind,rbinds。

+0

見SP :: spDist() – mdsumner

回答

1

下面是使用setNameswith,然後底液使用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。的變量: .. $ lon:num 147 153 147 147 147 ... .. $ lat:num -42.9 -27.5 -42.9 -42.9 -42.9 ... – user2995175

+0

嘗試dput(head(your_data,n = 20 ))如果它可以改善事情,雖然jalapic工作,並做你說你想要的,因爲你可以計算出距離。 setNames適用於向量(也許是你的'元組')以及df。 – Chris