R语言通过字符串匹配将细分洋区渔业数据按大洋分组的实现方法
R 海洋渔业数据按大洋聚合解决方案
核心思路
通过字符串匹配提取细分洋区所属的大洋大类,再按大类+年份分组聚合指标,全程使用tidyverse套件实现,代码逻辑清晰可调整。
完整实现代码
1. 加载依赖包
# 没有安装的话先运行 install.packages("tidyverse") library(tidyverse)
2. 读取并处理数据
# 读取原始数据 stock <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-10-12/fish-stocks-within-sustainable-levels.csv') # 数据清洗与聚合 ocean_category <- c("Pacific", "Atlantic", "Indian", "Mediterranean") stock_agg <- stock %>% # 重命名列适配使用习惯 rename( ocean_detail = Entity, code = Code, year = Year, bio_sus = `Share of fish stocks that are biologically sustainable`, bio_nonsus = `Share of fish stocks that are biologically unsustainable` ) %>% # 匹配生成大洋大类 mutate( ocean_large = case_when( str_detect(ocean_detail, "Pacific") ~ "太平洋", str_detect(ocean_detail, "Atlantic") ~ "大西洋", str_detect(ocean_detail, "Indian") ~ "印度洋", str_detect(ocean_detail, "Mediterranean") ~ "地中海", TRUE ~ NA_character_ ) ) %>% # 过滤不属于目标四大洋的记录 filter(!is.na(ocean_large)) %>% # 按大洋、年份分组聚合指标 group_by(ocean_large, year) %>% summarise( # 可根据分析需求替换sum为mean/max等聚合函数 total_sus = sum(bio_sus, na.rm = T), total_nonsus = sum(bio_nonsus, na.rm = T), .groups = "drop" )
补充说明
- 如果需要保留英文大洋名称,直接把
case_when里的中文值替换为对应的英文即可 - 聚合规则可灵活调整:如果需要计算全大洋平均可持续占比,把
sum替换为mean即可 - 因为所有细分洋区名称都包含对应大洋关键词,字符串匹配不会出现分类错误
内容的提问来源于stack exchange,提问作者Frankie Brook
相关产品推荐
相关产品推荐

