专栏名称: 走天涯徐小洋地理数据科学
一个爱生活的地理土博,分享GIS、遥感、空间分析、R语言、景观生态等地理数据科学实操教程、经典文献、数据资源
目录
相关文章推荐
51好读  ›  专栏  ›  走天涯徐小洋地理数据科学

样方重要值自动化计算

走天涯徐小洋地理数据科学  · 公众号  ·  · 2025-01-22 18:00

正文

写在前面

最近发现一个问题,剪样方剪了很多年,发现大家计算重要值的时候还是在用execl计算,这样的效率会有些低,在网上查了一下也没计算代码或较为便捷的工具,索性自己写一个代码,好让师弟师妹们不再进行繁琐的计算。重要值的计算原理如下:

其实就是,假设我们测定了四度一量(高度、盖度、密度、频度、生物量),然后想计算这个样方中每个物种的重要值,我们只需要计算该样方中所有物种的总平均高度、总盖度、总密度、总频度、总生物量,然后用每个物种的对应值除以总值求出该指标的相对值,然后加起来求均值即可。

数据准备

最准备的数据如下,小编已上传,文末下载。

ps:family列就是功能群的划分;其余的分别是高度、盖度、丰度、频度、生物量。为什么 丰度、频度是NA呢,因为我一般做的时候不测这两个指标,只用其余三个指标计算重要值。好多论文里也只用高度、盖度、生物量。但是,要是你测了所有的或者只测了其中的2-3个指标,只用你测的指标去计算也可以,记得在原始数据中标记成NA就行,代码计算的时候全是NA的指标会被忽略。

计算代码

计算代码分为两部分,第一部分的计算会展示所有物种的重要值计算结果;第二部分则会展示以功能群为基础的计算结果。

# 加载dplyr包library(dplyr)
# 读取数据文件species_data 1)
# 计算每个物种的高度均值,忽略NA值height_columns "^height", names(species_data)) # 找到所有包含"height"的列species_data$mean_height 1, function(x) mean(as.numeric(x), na.rm = TRUE))
# 确保其他列是数值类型species_data$coverage as.numeric(species_data$coverage)species_data$biomass as.numeric(species_data$biomass)species_data$abundance as.numeric(species_data$abundance)species_data$frequency as.numeric(species_data$frequency)
# 计算各个指标的总和,忽略NAtotal_height sum(species_data$mean_height, na.rm = TRUE)total_coverage sum(species_data$coverage, na.rm = TRUE)total_biomass sum(species_data$biomass, na.rm = TRUE)total_abundance sum(species_data$abundance, na.rm = TRUE)total_frequency sum(species_data$frequency, na.rm = TRUE)
# 定义计算重要值的函数calculate_importance_value function(row) { row as.numeric(row) valid_values c() if (!is.na(row[1])) valid_values c(valid_values, row[1] / total_height) # mean_height if (!is.na(row[2])) valid_values c(valid_values, row[2] / total_coverage) # coverage if (!is.na(row[3])) valid_values c(valid_values, row[3] / total_biomass) # biomass if (!is.na(row[4])) valid_values c(valid_values, row[4] / total_abundance) # abundance if (!is.na(row[5])) valid_values c(valid_values, row[5] / total_frequency) # frequency if (length(valid_values) == 0) return(0) importance_value mean(valid_values) return(importance_value)}
# 计算每个物种的重要值species_data$importance_value apply(species_data[, c("mean_height", "coverage", "biomass", "abundance", "frequency")], 1, calculate_importance_value)
# 1. 输出所有物种的计算结果print(species_data)
write.csv(species_data, "所有物种计算结果.csv", row.names = TRUE)

计算结果如下,设置好工作目录就可将就算结果保存出来

> print(species_data)     species family height_1 height_2 height_3 height_4 height_5 coverage abundance frequency biomass mean_height importance_value1   Species1 禾本科       NA       NA       NA       NA       NA       NA        NA        NA      NA         NaN       0.000000002   Species2 禾本科      8.7      8.5      7.5      5.8     11.7        8        NA        NA   3.746    8.440000       0.100872363   Species3 禾本科      3.7      3.5      1.6       NA       NA        1        NA        NA   0.011    2.933333       0.024716274   Species4 禾本科       NA       NA       NA       NA       NA       NA        NA        NA      NA         NaN       0.000000005   Species5 禾本科      3.5      6.7      5.3      4.2      4.5       20        NA        NA   5.060    4.840000       0.110621936   Species6 禾本科       NA       NA       NA       NA       NA       NA        NA        NA      NA         NaN       0.000000007   Species7 禾本科       NA       NA       NA       NA       NA       NA        NA        NA      NA         NaN       0.000000008   Species8






请到「今天看啥」查看全文