如何在R中使用slice_max()按年份筛选每年TOP20最高日均温数据
解决方案
你当前的代码未按年份分组,因此slice_max会从整个数据集筛选全局最高的20条记录。要实现每年提取20条最高气温记录,需先按年份拆分数据集,再对每组单独执行筛选操作,具体实现如下:
步骤说明
- 确保
date列为日期格式,若不是则先转换; - 从
date列提取年份作为分组依据; - 按年份分组后,对每组筛选气温最高的20条数据。
完整代码示例
# 加载依赖包 library(dplyr) library(lubridate) # 转换date列为日期格式(若尚未转换) daily_mean_temp_sorted$date <- as.Date(daily_mean_temp_sorted$date) # 提取年份、分组、筛选每年前20条最高气温记录 top_20_per_year <- daily_mean_temp_sorted %>% mutate(year = year(date)) %>% # 从日期中提取年份 filter(year >= 1997 & year <= 2010) %>% # 限定目标年份范围 group_by(year) %>% # 按年份分组 slice_max(mean, n = 20) %>% # 每组取气温最高的20条 ungroup() # 取消分组(根据后续操作需求可选)
无lubridate依赖的替代写法
若不想加载lubridate包,可使用基础R函数提取年份:
top_20_per_year <- daily_mean_temp_sorted %>% mutate(year = format(as.Date(date), "%Y")) %>% filter(year >= 1997 & year <= 2010) %>% group_by(year) %>% slice_max(mean, n = 20) %>% ungroup()
核心要点
group_by(year)是实现按年筛选的关键:它会将数据集按年份拆分为多个子数据集,后续的slice_max会对每个子数据集单独生效,而非作用于整个全局数据。
内容的提问来源于stack exchange,提问作者Fabio
相关产品推荐
相关产品推荐

