【问题标题】:Maximum difference in headings per group每组标题的最大差异
【发布时间】:2019-04-08 15:10:21
【问题描述】:

我有一个 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 中添加了一个数据点。这里还有两个用于可视化的饼图。

对于组 1:

对于组 2:

【问题讨论】:

  • 你是怎么想出 320 和 260 的??
  • 在grp 1中,最长距离为20到340 = 320°。在 grp 2 中,最长的是从 200 到 100 = 260°。就像指南针上的一样。
  • 在一个组中,取标题的最大值和最小值之间的差异是否足够,还是只考虑两个连续标题之间的顺时针差异?
  • 我尝试过编辑。我觉得有点难以解释,希望现在清楚一点。
  • 在发布答案后反复更改示例可能是一种不好的形式。您可以添加新示例而不是 dt2

标签: r data.table 360-degrees


【解决方案1】:

您可以在排序后计算差异,为跨越 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

【讨论】:

    猜你喜欢
    • 2019-06-12
    • 2021-11-16
    • 2021-04-11
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多