将样点计数数据转换为长/宽格式用于稀疏化物种累积曲线构建
解决方案:个体级观测数据转格式+稀疏化物种累积曲线构建
一、原始数据格式术语
你手里的这种每行对应单个观测个体、记录单一个体属性的格式,专业上叫个体级观测数据(Individual-level observational data),也常被称为事件列表格式(Event list format)——每条记录就是一次独立的观测事件。
二、数据格式转换(以R语言为例,生态数据分析常用)
假设你的原始数据框名为raw_data,包含核心列:Point_Name(样点名)、Survey_ID(调查标识,区分同一样点的多次调查)、Species(物种名)。
1. 转换为长格式(Long Format)
长格式以「样点-调查-物种」为一行,记录对应个体数,保留重复调查的维度,适合后续分析:
library(dplyr) # 按样点、调查、物种分组计数 long_data <- raw_data %>% group_by(Point_Name, Survey_ID, Species) %>% summarise(Individual_Count = n(), .groups = "drop")
2. 转换为宽格式(Wide Format)
宽格式以「样点-调查」为一行,列对应各物种的个体数,缺失物种填0:
library(tidyr) wide_data <- long_data %>% pivot_wider( names_from = Species, values_from = Individual_Count, values_fill = 0 # 没有观测到的物种计数补0 )
三、稀疏化方法构建物种累积曲线
用生态分析常用的vegan包实现稀疏化(抽稀)的物种累积曲线,支持重复调查的样本处理:
1. 准备物种矩阵
先从宽格式提取出用于分析的物种计数矩阵:
library(vegan) # 提取物种计数列,转成矩阵 species_matrix <- wide_data %>% select(-Point_Name, -Survey_ID) %>% as.matrix() # 给行命名,区分不同样点的不同调查 rownames(species_matrix) <- paste(wide_data$Point_Name, wide_data$Survey_ID, sep = "_")
2. 构建稀疏化累积曲线
# 用抽稀法构建曲线,100次置换计算置信区间 rarefaction_curve <- specaccum( species_matrix, method = "rarefaction", # 指定稀疏化方法 permutations = 100 ) # 绘图 plot( rarefaction_curve, main = "稀疏化物种累积曲线", xlab = "调查样本数(样点-调查组合)", ylab = "累计物种数", col = "#2E86AB", lwd = 2 ) # 添加置信区间 lines(rarefaction_curve, type = "l", col = "gray", lty = 2)
如果想按样点整体累积(合并同一样点的多次调查),可以先聚合样点的物种总数:
# 聚合同一样点的所有调查数据 point_aggregated <- raw_data %>% group_by(Point_Name, Species) %>% summarise(Individual_Count = n(), .groups = "drop") %>% pivot_wider(names_from = Species, values_from = Individual_Count, values_fill = 0) %>% select(-Point_Name) %>% as.matrix() # 构建按样点的稀疏化曲线 point_curve <- specaccum(point_aggregated, method = "rarefaction", permutations = 100) plot( point_curve, main = "按样点稀疏化物种累积曲线", xlab = "样点数", ylab = "累计物种数", col = "#00A170", lwd = 2 )
内容的提问来源于stack exchange,提问作者Rach B.
相关产品推荐
相关产品推荐

