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

在R语言中计算同一个体在不同组间的位置距离差异

计算同个体不同组间的位置差异

需求:针对每个ID,计算其在date组"1"和"2"之间的位置指标(如X、Y坐标)差异,仅关注同一ID的组间对比,忽略不同ID间的距离。

解决方案(R语言)

方法1:使用dplyr分组计算差值

按ID分组后,直接提取两组的位置数据计算差值:

library(dplyr)

diff_result <- df %>%
  group_by(ID) %>%
  summarise(
    # X坐标差值:组2 - 组1
    X_diff = X_Lambert_72_m[date == "2"] - X_Lambert_72_m[date == "1"],
    # Y坐标差值:组2 - 组1
    Y_diff = Y_Lambert_72_m[date == "2"] - Y_Lambert_72_m[date == "1"],
    # 计算平面欧氏距离
    distance = sqrt(X_diff^2 + Y_diff^2),
    .groups = "drop"
  )

print(diff_result)

方法2:转宽表后计算差异

先将数据转为宽格式,让同一ID的两组数据处于同一行,再直接计算:

library(tidyr)
library(dplyr)

# 转换为宽表
wide_df <- df %>%
  pivot_wider(
    id_cols = ID,
    names_from = date,
    values_from = c(X_Lambert_72_m, Y_Lambert_72_m)
  )

# 计算差值与距离
diff_result <- wide_df %>%
  mutate(
    X_diff = X_Lambert_72_m_2 - X_Lambert_72_m_1,
    Y_diff = Y_Lambert_72_m_2 - Y_Lambert_72_m_1,
    distance = sqrt(X_diff^2 + Y_diff^2)
  ) %>%
  select(ID, X_diff, Y_diff, distance)

print(diff_result)

结果说明

运行后会输出每个ID的三组结果:

  • X_diff:X坐标组2与组1的差值
  • Y_diff:Y坐标组2与组1的差值
  • distance:两组间的平面欧氏距离(若需三维距离,可加入Z相关字段扩展计算)

针对示例数据集,结果会显示每个ID的X差值为2.5,Y差值为0,平面距离为2.5(示例中Y坐标两组完全一致)。


内容的提问来源于stack exchange,提问作者C. Guff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:20:33