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

如何用Vegan提取质心间距离至数据框?批量计算逐年质心距离

批量计算多年份生物数据集的质心距离

方法思路

通过循环或函数式编程自动生成年份分组,结合vegan::vegdist()计算高维距离矩阵,再用usedist::dist_between_centroids()批量计算质心距离,无需手动输入分组向量。

示例代码(基于Dune数据集)

1. 加载依赖包与预处理数据

先模拟含年份分组的生物数据集,实际使用时替换为你的真实数据:

library(vegan)
library(usedist)
library(dplyr)
library(purrr)

# 加载Dune数据集并模拟10年分组(可扩展为20年)
data(Dune)
set.seed(123)
dune_data <- Dune %>%
  mutate(Year = sample(1990:1999, nrow(Dune), replace = TRUE)) %>%
  arrange(Year)  # 按年份排序

2. 批量计算相邻年份的质心距离

按时间顺序计算连续年份间的质心距离:

# 获取排序后的唯一年份
unique_years <- sort(unique(dune_data$Year))

# 生成相邻年份对
adjacent_pairs <- map(1:(length(unique_years)-1), ~c(unique_years[.x], unique_years[.x+1]))

# 批量计算距离
adjacent_distances <- map_dfr(adjacent_pairs, function(pair){
  y1 <- pair[1]
  y2 <- pair[2]
  # 提取目标年份的样本
  subset_data <- dune_data %>% filter(Year %in% pair)
  # 自动生成分组向量
  group_vec <- factor(subset_data$Year, levels = pair)
  # 计算高维距离矩阵(这里用Bray-Curtis,可替换为euclidean等)
  dist_mat <- vegdist(subset_data[, 1:20], method = "bray")
  # 计算质心距离
  dist_val <- dist_between_centroids(dist_mat, group_vec)
  # 返回结果行
  data.frame(Year_Pair = paste(y1, y2, sep = "-"), Distance = dist_val)
})

# 查看结果
print(adjacent_distances)

3. 批量计算所有年份两两的质心距离

如果需要对比所有年份组合的质心距离:

# 生成所有年份对
all_year_pairs <- combn(unique_years, 2, simplify = FALSE)

# 批量计算距离
all_distances <- map_dfr(all_year_pairs, function(pair){
  y1 <- pair[1]
  y2 <- pair[2]
  subset_data <- dune_data %>% filter(Year %in% pair)
  group_vec <- factor(subset_data$Year, levels = pair)
  dist_mat <- vegdist(subset_data[, 1:20], method = "bray")
  dist_val <- dist_between_centroids(dist_mat, group_vec)
  data.frame(Year_Pair = paste(y1, y2, sep = "-"), Distance = dist_val)
})

# 按年份对排序输出
all_distances <- all_distances %>% arrange(Year_Pair)
print(all_distances)

关键说明

  • 距离方法:vegdist()支持多种距离算法,可根据数据类型替换method参数(如euclidean、jaccard)。
  • 数据适配:真实数据只需确保Year列是正确的年份变量,且物种数据位于对应列范围(代码中[,1:20]需替换为你的物种列区间)。
  • 效率优化:20年数据的循环计算效率足够,若样本量极大,可考虑用data.table替换dplyr提升速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:24:24