我有带航向的GPS跟踪数据,我想计算白天航向的变化,以查看动物是否在长距离内向一个方向移动(用于迁移)。
individual.id date heading
1 2020-12-16 150
1 2021-02-15 352
1 2021-10-27 211
1 2021-10-28 22
1 2021-10-29 235
1 2021-10-30 340
1 2021-11-02 5
字符串
所以我尝试了从包“循环”的循环功能,这是我运行
direction <- df %>% group_by(individual.id) %>%
mutate(heading = circular(heading, units = "degrees", template= "geographics"),
heading.diff=heading-lag(heading))
型
和结果
individual.id date heading heading.diff
1 2020-12-16 150 NA
1 2021-02-15 352 202
1 2021-10-27 211 141
1 2021-10-28 22 189
1 2021-10-29 235 213
1 2021-10-30 340 105
1 2021-11-02 5 335
型
问题是,航向开始和结束在0/360度,这意味着如果一个点在340度,它可以转向5度,只有25度角,但是计算是逆时针到下一个Angular ,而不是通过0/360的较短路径,(即335度)。当它被视为线性值(如以下命令)时,它会给出相同的结果
direction <- df%>% group_by(individual.id) %>%
mutate(heading.diff=abs(heading-lag(heading)))
型
但正确的价值观应该是这样的
individual.id date heading heading.diff
1 2020-12-16 150 NA
1 2021-02-15 352 158
1 2021-10-27 211 141
1 2021-10-28 22 171
1 2021-10-29 235 147
1 2021-10-30 340 105
1 2021-11-02 5 25
型
有没有办法正确计算航向的差异?
1条答案
按热度按时间nnsrf1az1#
你可以考虑每一种可能的情况,只选择最小的
字符串