如何按site分组获取各站点最低气温?R语言数据处理问题
按站点分组获取最低气温的解决方案
你遇到的问题核心是:subset()函数不支持by参数,这个参数会被直接忽略,导致min(temp)计算的是整个数据集的全局最低温,自然只能返回对应一行,无法实现分组筛选。
以下是几种可行的实现方式:
方法1:基础R原生实现
方式1.1:仅获取每个站点的最低温数值
用aggregate()函数直接分组聚合计算:
# 计算每个站点的最低气温 min_temp_by_site <- aggregate(temp ~ site, data = df, FUN = min) print(min_temp_by_site)
输出结果会是每个站点对应的最低温数值。
方式1.2:保留原数据中最低温对应的完整行
用ave()函数为每个站点标记出该行是否为组内最低温,再用subset()筛选:
# 新增列标记该行是否为对应站点的最低温 df$is_group_min <- df$temp == ave(df$temp, df$site, FUN = min) # 筛选出所有组内最低温的行 minT <- subset(df, is_group_min) print(minT)
方法2:使用dplyr(tidyverse生态)
如果习惯更直观的管道语法,推荐用dplyr:
先安装并加载包(首次使用需安装):
install.packages("dplyr") library(dplyr)
方式2.1:筛选出每个站点最低温的完整行
minT <- df %>% group_by(site) %>% # 按site分组 filter(temp == min(temp)) %>% # 筛选组内最低温的行 ungroup() # 取消分组状态 print(minT)
方式2.2:仅汇总每个站点的最低温数值
min_temp_summary <- df %>% group_by(site) %>% summarise(min_temp = min(temp)) %>% # 计算组内最低温 ungroup() print(min_temp_summary)
内容的提问来源于stack exchange,提问作者L55
相关产品推荐
相关产品推荐

