创建所有可能组合的边缘列表

时间:2016-06-12 01:11:36

标签: r

我有一个数据框,其中包含人员列表以及他们工作地点的相应纬度坐标。基本上我想创建一个新的数据框,表示边缘列表,显示每个人与原始数据框中所有其他人之间的距离。我知道如何计算距离,但我正在与我的for循环斗争。

原始数据框看起来像这样(coord = tuple):

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。

1 个答案:

答案 0 :(得分: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