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

求助:如何沿样带计算物种(ASVs)的纬度分布范围?

计算ASV(物种)的纬度分布范围解决方案

核心思路

  • 将宽格式的ASV丰度数据转换为长格式,便于按单个物种分组计算
  • 过滤掉丰度为0的记录,仅保留物种实际存在的站点数据
  • 按ASV分组,计算每个物种的纬度跨度:最大纬度 - 最小纬度(南纬数值越大越靠北,差值为正,直接代表纬度范围的度数)

R代码实现

# 加载tidyverse工具包(包含数据转换和分组计算的核心函数)
library(tidyverse)

# 导入你提供的测试数据
test <- structure(list(Station_neat = c("001_DCM", "001_SA", "003_DCM", 
"003_SA", "005_DCM", "005_SA", "007_DCM", "007_SA", "009_DCM", 
"009_SA", "011_DCM", "011_SA", "013_DCM", "013_SA", "015_DCM", 
"015_SA", "017_DCM", "017_SA", "019_DCM", "019_SA", "021_DCM", 
"021_SA", "023_DCM", "023_SA", "025_DCM", "025_SA", "027_DCM", 
"027_SA", "029_DCM", "029_SA"), Lat = c(-29.997, -29.997, -30.9975, 
-30.9975, -31.9995, -31.9995, -32.99816667, -32.99816667, -34.00016667, 
-34.00016667, -34.9995, -34.9995, -36.00083333, -36.00083333, 
-36.9985, -36.9985, -38.00016667, -38.00016667, -38.99833333, 
-38.99833333, -39.999, -39.999, -40.99783333, -40.99783333, -42.0005, 
-42.0005, -42.99633333, -42.99633333, -43.9975, -43.9975), asv_3 = c(80, 
0, 65, 0, 41, 0, 50, 0, 44, 0, 53, 0, 59, 0, 38, 0, 43, 0, 25, 
0, 29, 51, 35, 22, 133, 35, 159, 83, 965, 414), asv_4 = c(766, 
694, 286, 791, 421, 1202, 382, 431, 484, 684, 431, 529, 454, 
722, 621, 370, 472, 439, 394, 243, 414, 518, 297, 300, 574, 396, 
395, 1359, 1113, 541), asv_5 = c(1314, 2812, 729, 2874, 915, 
3720, 1226, 2046, 940, 1783, 1220, 2627, 986, 3195, 1514, 566, 
590, 1603, 325, 667, 748, 932, 616, 339, 1167, 1088, 988, 2333, 
1563, 2146)), row.names = c(NA, 30L), class = "data.frame")

# 数据转换与纬度范围计算
asv_lat_stats <- test %>%
  # 把所有asv开头的列转为长格式,区分物种和丰度
  pivot_longer(cols = starts_with("asv_"), names_to = "ASV", values_to = "Abundance") %>%
  # 只保留丰度不为0的记录
  filter(Abundance != 0) %>%
  # 按物种分组计算
  group_by(ASV) %>%
  summarise(
    Min_Lat = min(Lat),          # 物种分布的最南纬度
    Max_Lat = max(Lat),          # 物种分布的最北纬度
    Lat_Range = Max_Lat - Min_Lat, # 纬度分布范围(度数)
    Mean_Lat = mean(Lat)         # 物种分布的平均纬度(用于散点图)
  )

# 查看计算结果
print(asv_lat_stats)

结果说明

  • Min_Lat:该物种出现的最靠南的纬度(数值最小)
  • Max_Lat:该物种出现的最靠北的纬度(数值最大)
  • Lat_Range:纬度分布范围,与你示例中的计算逻辑一致(如-35°到-40°的跨度为5°)
  • Mean_Lat:物种分布的平均纬度,可用于绘制你提到的平均纬度与纬度范围散点图

绘制散点图代码

如果需要生成散点图,可在上述代码基础上添加:

ggplot(asv_lat_stats, aes(x = Mean_Lat, y = Lat_Range)) +
  geom_point(size = 2) +
  labs(x = "平均纬度", y = "纬度分布范围(°)") +
  theme_bw()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:09:18