【发布时间】:2018-08-02 21:35:28
【问题描述】:
我目前有一个这样的数据框:
x y category
159.5 143.5 1
157.5 180.5 1
127.5 159.5 1
115.5 115.5 2
179.5 101.5 2
97.5 103.5 2
149.5 397.5 3
179.5 297.5 3
我想将每个点与数据框中的每个其他点进行比较。我想得到 x 和 y 的差异(即点 159.5、143.5 到点 157.5、180.5 将是 x 中的 2 和 y 中的 +37 的绝对差异)
我尝试过多种方式来做到这一点,但我没有接近,并且使用了太多太慢的 for 循环。我很肯定有一种 dplyr/function 方法可以做到这一点,这真的很有帮助。
这是我的示例输出目标(未全部填写,但总体思路):
x y abs x-diff y-diff category
159.5 143.5 0 0 1 (from 159.5 143.5)
159.5 143.5 2 37 1 (from 157.5 180.5)
159.5 143.5 32 16 1 (from 127.5 159.5)
157.5 180.5 0 0 1 (from 157.5 180.5)
157.5 180.5 2 -37 1 (from 159.5 143.5)
157.5 180.5 1
127.5 159.5 0 0 1
127.5 159.5 1
127.5 159.5 1
115.5 115.5 0 0 2 (from 115.5 115.5)
115.5 115.5 64 -14 2 (from 179.5 101.5)
115.5 115.5 18 -12 2 (from 97.5 103.5)
179.5 101.5 0 0 2
179.5 101.5 2
179.5 101.5 2
97.5 103.5 0 0 2
97.5 103.5 2
97.5 103.5 2
149.5 397.5 0 0 3
149.5 397.5 3
179.5 297.5 0 0 3
179.5 297.5 3
应该有 3*3(用于第 1 类)、3*3(用于第 2 类)和 2*2(用于第 3 类),总共 22 行。
已编辑:我添加了一个类别变量。我试图修改以前的答案以使其正常工作,但我想比较每个类别中的坐标。其他答案不适用于这个添加的层,因为它会重复整个数据帧 n 次,但对于 group_by 来说更复杂。
【问题讨论】: