我有一个数据框,其中包含人员列表以及他们工作地点的相应纬度坐标。基本上我想创建一个新的数据框,表示边缘列表,显示每个人与原始数据框中所有其他人之间的距离。我知道如何计算距离,但我正在与我的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。
答案 0 :(得分:1)
这是使用setNames
和with
然后使用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