我有一个data.table,其中包含有关每组(360度)标题的信息。
library(data.table)
dt <- data.table(headings = c(340,0,20,90,180,270,91), grp = c(1,1,1,2,2,2,2))
headings grp
1: 340 1
2: 0 1
3: 20 1
4: 90 2
5: 180 2
6: 270 2
7: 91 2
在grp 1中,标题之间的距离是20、20和320,而在grp 2中,标题之间的距离是1,89,90和180。我想找到标题之间的最大距离并将它们添加到每个组中,因此结果应为看起来像这样:
headings grp maxHeading
1: 340 1 320
2: 0 1 320
3: 20 1 320
4: 90 2 180
5: 180 2 180
6: 270 2 180
7: 91 2 180
我不一定想要一个data.table解决方案,但是如果有的话,那会很好。
编辑:为澄清起见,我更改了值并在grp 2中添加了一个数据点。这也是两个可视化的饼图。
答案 0 :(得分:4)
您可以在排序后计算差异,为穿过0/360的货币对再加一个:
dt[, v := max(
diff(sort(headings)),
min(headings) - max(headings) + 360
), by=grp]
headings grp v
1: 340 1 320
2: 0 1 320
3: 20 1 320
4: 90 2 180
5: 180 2 180
6: 270 2 180
7: 91 2 180