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

如何在R中对数据框内多组样本计算Shannon Index

在R中按样本计算Shannon多样性指数

1. 导入你的样本数据

先把你提供的表格转换成R可直接使用的数据框,复制以下代码运行即可:

sample_data <- data.frame(
  Sample = c("17a", "17a", "17a", "17a", "17b", "17b", "17b", "17b", "18a", "18a", "18a", "18a"),
  Species = c("Shark", "Dolphin", "Sting Ray", "Badger", "Shark", "Dolphin", "Sting Ray", "Badger", "Shark", "Dolphin", "Sting Ray", "Badger"),
  Count = c(17, 25, 1, 234, 4, 6, 19, 25, 45, 4, 4, 3)
)

2. 手动计算(理解原理)

Shannon指数公式为:( H = -\sum (p_i \times \ln(p_i)) ),其中( p_i )是单个物种个体数占样本总个体数的比例。我们用dplyr包按样本分组计算,步骤如下:

# 安装并加载dplyr(首次使用需安装)
install.packages("dplyr")
library(dplyr)

# 分组计算Shannon指数
shannon_manual <- sample_data %>%
  group_by(Sample) %>%
  mutate(
    total_individuals = sum(Count),  # 计算每个样本的总个体数
    proportion = Count / total_individuals,  # 计算物种占比
    term = proportion * log(proportion)  # 计算公式中的单项
  ) %>%
  summarise(
    Shannon_Index = -sum(term, na.rm = TRUE)  # 求和取负得到指数,na.rm处理可能的NA值
  )

# 查看结果
print(shannon_manual)

3. 用专业生态包快速计算(推荐)

vegan是生态领域常用的工具包,能一键计算多样性指数,步骤更简洁:

# 安装并加载vegan和tidyr(首次使用需安装)
install.packages(c("vegan", "tidyr"))
library(vegan)
library(tidyr)

# 将长格式数据转换为宽格式(样本行,物种列)
wide_data <- sample_data %>%
  pivot_wider(names_from = Species, values_from = Count, values_fill = 0)

# 提取计数矩阵,去掉Sample列
counts <- wide_data %>% select(-Sample)

# 计算Shannon指数
shannon_values <- diversity(counts, index = "shannon")

# 匹配样本名,生成结果表
shannon_result <- data.frame(
  Sample = wide_data$Sample,
  Shannon_Index = shannon_values
)

# 查看结果
print(shannon_result)

说明

  • 两种方法结果一致,vegan::diversity默认使用自然对数,若需常用对数,可添加参数base = 10。
  • 如果你的原始数据是从CSV/Excel导入的,可使用read.csv()或readxl::read_excel()替代手动创建数据框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 23:48:13