如何计算猎物物种在单个捕食者中的出现百分比(R语言)
计算猎物在捕食者个体中的出现百分比(R语言)
样本数据集
Species <- c("Bass", "Bass", "Bass", "Bass", "Bass", "Bass", "Bass", "Bass", "Bass") FishID <- c("a1", "a1", "a1", "a2", "a2", "a3", "a3", "a3", "a3") Prey <- c("Amphipoden", "Mysis", "Polychaeten", "Amphipoden", "Mysis", "Amphipoden", "Mysis", "Polychaeten", "Mollusca") df <- data.frame(Species, FishID, Prey)
需求说明
现有捕食者Bass共3个唯一个体(FishID:a1、a2、a3),需计算每种猎物出现在多少个Bass个体的胃中,占总Bass个体数的比例。
预期结果
最终需得到如下格式的数据集:
Species <- c("Bass", "Bass", "Bass", "Bass") Prey <- c("Amphipoden", "Mysis", "Polychaeten", "Mollusca") Percentage <- c(100, 100, 66.6, 33.3) df2 <- data.frame(Species, Prey, Percentage)
尝试的错误代码
以下代码无法得到预期结果,原因是它统计的是每种猎物的总出现次数占所有猎物总次数的比例,而非基于个体数的占比:
df %>% group_by(Species, Prey) %>% summarise(n = n()) %>% mutate(percent = n / sum(n) * 100)
正确解决方法
核心思路是:先对每个个体的每种猎物去重(同一个体多次吃同一种猎物仅记一次出现),再统计每种猎物对应的个体数量,最后除以总个体数计算百分比:
library(dplyr) # 获取Bass总个体数 total_individuals <- df %>% distinct(FishID) %>% nrow() # 计算猎物的个体出现占比 df2 <- df %>% distinct(Species, FishID, Prey) %>% # 去重:每个个体的每种猎物仅保留一条记录 group_by(Species, Prey) %>% summarise(individual_count = n(), .groups = "drop") %>% # 统计每种猎物对应的个体数 mutate(Percentage = round(individual_count / total_individuals * 100, 1)) %>% # 计算百分比并保留1位小数 select(Species, Prey, Percentage) # 选择需要的列 # 查看结果 df2
运行后输出结果与预期一致:
Species Prey Percentage 1 Bass Amphipoden 100.0 2 Bass Mollusca 33.3 3 Bass Mysis 100.0 4 Bass Polychaeten 66.7
内容的提问来源于stack exchange,提问作者Suusie
相关产品推荐
相关产品推荐

