R语言计算多年固定日期区间(6月7日至11月9日)的气温均值
R实现每年指定生育期气温均值计算的方法
推荐使用tidyverse生态工具包完成,lubridate用于日期处理、dplyr用于数据清洗,逻辑清晰易维护,步骤如下:
步骤1:加载依赖包
# 未安装包先执行 install.packages("tidyverse") library(tidyverse) library(lubridate)
步骤2:转换日期格式
首先要把数据中的日期列从字符串格式转为R可识别的日期格式:
# 假设你的原始气温数据框名为df df <- df %>% mutate(date = ymd(date)) # 如果你的日期是日/月/年等其他格式,替换ymd为dmy/mdy等对应函数即可
步骤3:筛选生育期数据+按年求平均
生育期为每年6月7日到11月9日,按以下逻辑筛选后分组计算:
result <- df %>% # 提取日期对应的年、月、日维度 mutate( year = year(date), month = month(date), day = day(date) ) %>% # 筛选符合生育期范围的行 filter( (month == 6 & day >= 7) | (month > 6 & month < 11) | (month == 11 & day <= 9) ) %>% # 按年份分组计算平均气温 group_by(year) %>% summarise( growth_period_tmean = mean(tmax, na.rm = TRUE) # na.rm=TRUE参数会自动跳过缺失值,避免缺失值导致结果为NA )
运行后得到的result数据框即为1971-2020年每一年作物生育期的平均气温结果。
基础R实现方案(无需安装第三方包)
如果不想依赖外部包,可直接用基础R的内置函数实现:
# 转换日期格式 df$date <- as.Date(df$date) # 提取年份、月日字符串 df$year <- format(df$date, "%Y") df$month_day <- format(df$date, "%m-%d") # 筛选生育期数据 target_data <- df[df$month_day >= "06-07" & df$month_day <= "11-09", ] # 按年计算平均气温 result <- aggregate(tmax ~ year, data = target_data, FUN = mean, na.rm = TRUE)
内容的提问来源于stack exchange,提问作者Amrit
相关产品推荐
相关产品推荐

