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

如何按月份计算数据框中空腹鱼占比及猎物存在/缺失比例?

鱼类胃内容物数据统计解决方案

问题背景

我有鱼类胃内容物(猎物)数据:原始为长格式(每条鱼对应唯一FID,每行代表一种检出的猎物类群),已转换为宽格式(每行对应一条鱼)。需要完成:

  • 按月份计算空腹鱼占比(即totalnumPrey == 0的个体占比)
  • 计算每种猎物类群的存在/缺失占比(比如含Isopod的鱼类占比)
    后续还需支持其他分组维度的统计。

之前尝试的代码报错:

example %>%
      group_by(empty, MONTH) %>%
      summarise(totalnumPrey = n()) %>%
      mutate(prop = n / sum(n))

错误信息:

Error in `mutate()`:
! Problem while computing `prop = n/sum(n)`.
ℹ The error occurred in group 1: empty = "Empty".
Caused by error in `sum()`:
! invalid 'type' (closure) of argument

错误原因

  1. 变量名错误:summarise中把计数结果命名为totalnumPrey,但后续mutate里误用了不存在的变量n
  2. 分组逻辑错误:计算每月空腹占比应按MONTH分组,而非同时按empty和MONTH分组,否则无法在组内计算占比。

解决方案

1. 按月份计算空腹鱼占比

基于宽格式数据(每行对应一条鱼),两种实现方式:

# 方式1:直接统计总数与空腹数
empty_monthly_prop <- example %>%
  group_by(MONTH) %>%
  summarise(
    total_fish = n(),
    empty_fish = sum(totalnumPrey == 0),
    empty_proportion = empty_fish / total_fish
  )

# 方式2:用count简化流程
empty_monthly_prop <- example %>%
  mutate(is_empty = totalnumPrey == 0) %>%
  count(MONTH, is_empty) %>%
  group_by(MONTH) %>%
  mutate(proportion = n / sum(n)) %>%
  filter(is_empty) %>%
  select(MONTH, empty_proportion = proportion)

2. 计算每种猎物类群的存在占比

假设宽格式数据中,猎物类群为二进制列(1=存在,0=不存在),用across批量处理所有猎物列:

# 按月份统计所有猎物类群的存在占比
prey_monthly_prop <- example %>%
  group_by(MONTH) %>%
  summarise(
    total_fish = n(),
    # 替换为你的猎物列范围,比如Isopod:Copepod,或matches("prey_")匹配列名
    across(Isopod:Copepod, ~ sum(.x == 1) / total_fish, .names = "{.col}_prop")
  )

# 支持多维度分组(比如加物种、区域)
prey_multi_prop <- example %>%
  group_by(MONTH, Species, Region) %>%
  summarise(
    total_fish = n(),
    across(Isopod:Copepod, ~ sum(.x == 1) / total_fish, .names = "{.col}_prop")
  )

补充处理

如果猎物列是计数型(记录该猎物的数量),需先转换为存在/缺失的二进制值:

example <- example %>%
  mutate(across(Isopod:Copepod, ~ as.integer(.x > 0)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:48:15