如何基于2020年水温溶解氧插值数据计算全年每日TDO3值
R语言TDO3计算实现方案
推荐使用tidyverse的向量化分组操作实现,运行效率远高于手动写for循环,代码可读性也更强:
首先加载依赖包:
library(tidyverse)
核心计算代码:
TDO3 <- do_temp %>% # 按日期分组 group_by(date) %>% # 筛选溶解氧不低于3mg/L的所有记录 filter(mean_do >= 3) %>% # 分组内按溶解氧升序排列,最小的符合要求值就是最接近3mg/L的数值 arrange(mean_do, .by_group = TRUE) %>% # 取每个日期分组的第一条记录 slice_head(n = 1) %>% # 整理输出列名 ungroup() %>% select(dates = date, tdo3 = mean_temp)
如果需要保证输出包含2020年全部366天,避免部分日期无≥3mg/L溶解氧记录导致日期缺失,可以补充以下代码补全日期:
# 生成2020年完整日期序列 full_date_list <- tibble(dates = seq.Date(as.Date("2020-01-01"), as.Date("2020-12-31"), by = "1 day")) # 左连接补全缺失日期,无有效记录的日期TDO3值为NA TDO3 <- full_date_list %>% left_join(TDO3, by = "dates")
用你提供的2020-01-01样例数据验证,符合要求的最小溶解氧值为21m深度的3.43mg/L,对应温度3.18,和你给出的期望输出第一条结果完全匹配。
内容的提问来源于stack exchange,提问作者Tyler_Robin
相关产品推荐
相关产品推荐

