You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修正R代码以正确计算动物移动点间距离并按天平均

动物移动数据集的距离计算与日均距离优化问题

背景与初始代码

为适配大规模动物移动数据集,用R代码替代Excel公式计算移动距离,编写了如下初始代码:

library(sf)
library(readr)
library(dplyr)

## 加载并清理数据,确保格式正确
ToadDistCalc <- read_csv("Documents/RProjects/ToadMovement/ToadDistCalc.csv")
ToadDistCalc$DateTime <- as.POSIXct(ToadDistCalc$DateTime,
                                    format = "%Y-%m-%d %H:%M:%S",
                                    tz = "America/Jamaica")

## 将数据转换为空间对象,需确认正确的EPSG编码
toad.so <- st_as_sf(
  ToadDistCalc,
  coords = c('X', 'Y'),
  crs = "EPSG+26918")

## 计算距离,按ID分组处理
toad.so <- toad.so %>%
  group_by(ID) %>%
  mutate(
    lead = geometry[row_number() + 1],
    dist = st_distance(geometry, lead, by_element = T),)

遇到的问题

  • 检查数据发现,移动距离被错误分配至对应移动发生日期的前一天
  • 尝试将lead变量改为geometry[row_number() - 1]时出现报错
  • 希望通过代码实现按天平均移动距离,替代现有Excel操作方式

更新后的代码(尝试支持时间平均)

后续编写了尝试支持时间平均的代码版本,但仍存在问题:

library(sf)
library(readr)
library(dplyr)

## 加载并清理数据,确保格式正确
ToadDistCalc <- read_csv("Documents/RProjects/ToadMovement/ToadDistCalc.csv")
ToadDistCalc$DateTime <- as.POSIXct(ToadDistCalc$DateTime,
                                    format = "%Y-%m-%d %H:%M:%S",
                                    tz = "America/Jamaica")

## 将数据转换为空间对象,需确认正确的EPSG编码
toad.so <- st_as_sf(
  ToadDistCalc,
  coords = c('X', 'Y'),
  crs = "EPSG+26918")

## 计算点间距离,按ID分组处理
succ.dist = function(toad){
  c(0,
    st_distance(
      toad$geometry[-nrow(toad)],
      toad$geometry[-1],
      by_element=TRUE))
}

step.distances = unlist(lapply(split(toad.so, toad.so$ID), succ.dist))
toad.so$step.distances = step.distances

## 计算时间间隔
succ.date = function(toadDate){
  c(0, difftime(
    strptime(toadDate$Date[-1], "%m/%d/%Y"),
    strptime(toadDate$Date[-nrow(toadDate)], "%m/%d/%Y"),
    units="days"))
}

DaysBetween = unlist(lapply(split(toad.so, toad.so$ID), succ.date))
toad.so$DaysBetween = DaysBetween

## 计算日均移动距离
toad.so$AvgdDist <- step.distances/DaysBetween

需求

现寻求以下问题的解决方案:

  1. 修正代码逻辑,确保点间移动距离被正确分配到对应的记录行
  2. 解决修改row_number引用时出现的报错问题
  3. 完善按天平均移动距离的计算逻辑,保证结果准确

内容的提问来源于stack exchange,提问作者CorinthianHelm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 14:33:40