R语言 按线性处理计算圆航向差

zd287kbt  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(96)

我有带航向的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


有没有办法正确计算航向的差异?

nnsrf1az

nnsrf1az1#

你可以考虑每一种可能的情况,只选择最小的

df %>% 
  group_by(individual.id) %>% 
  mutate(heading.diff=pmin(
    abs(heading -lag(heading) + 360), 
    abs(heading - lag(heading)), 
    abs(heading - lag(heading) - 360)))

#   individual.id date       heading heading.diff
#           <int> <chr>        <int>        <dbl>
# 1             1 2020-12-16     150           NA
# 2             1 2021-02-15     352          158
# 3             1 2021-10-27     211          141
# 4             1 2021-10-28      22          171
# 5             1 2021-10-29     235          147
# 6             1 2021-10-30     340          105
# 7             1 2021-11-02       5           25

字符串

相关问题