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

如何在R中按站点、日期统计各物种的捕获个体数?

问题解决与正确代码实现

错误分析

  1. 类型错误:species是字符型列,sum()函数仅适用于数值型数据,直接对字符列求和会触发类型错误。
  2. 分组不全:你的需求是按「站点-日期-物种」统计捕获数,但代码仅按date分组,遗漏了site和species两个关键分组维度。
  3. 函数误用:mutate()用于在原数据行上添加列,而你需要的是聚合后的汇总数据,应该使用summarize()或count()。

正确实现代码

方法1:使用count()(最简洁)

count()可以直接按指定列分组并计数,自动生成名为n的计数列,代表每个分组的捕获个体数:

library(dplyr)

formatted_capture <- ftc_capture_data %>%
  count(site, date, species, name = "capture_count")
  • name = "capture_count"可自定义计数列名称,替换默认的n。

方法2:使用group_by() + summarize()

如果需要更灵活的聚合操作(比如后续要添加其他统计项),可以用分组后汇总的方式:

library(dplyr)

formatted_capture <- ftc_capture_data %>%
  group_by(site, date, species) %>%
  summarize(capture_count = n(), .groups = "drop")
  • .groups = "drop"用于取消分组状态,避免后续操作受分组影响。

可选:补全所有站点-日期-物种组合

如果需要包含「某站点某日期无捕获的物种」(显示捕获数为0),可以结合tidyr::complete()函数:

library(dplyr)
library(tidyr)

formatted_capture <- ftc_capture_data %>%
  count(site, date, species, name = "capture_count") %>%
  complete(site, date, species, fill = list(capture_count = 0))

后续扩展

处理完成后,你可以直接在formatted_capture数据框上继续添加其他列,比如:

formatted_capture <- formatted_capture %>%
  mutate(year = lubridate::year(date),  # 提取年份
         season = case_when(            # 添加季节列
           month(date) %in% 3:5 ~ "春季",
           month(date) %in% 6:8 ~ "夏季",
           month(date) %in% 9:11 ~ "秋季",
           TRUE ~ "冬季"
         ))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:42:42