You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言按lot分组后求取多列day字段最大值的实现方法

按地块分组计算多日洪水水位最大值的实现方案

问题说明

你现在有包含地块编号lot、3天洪水水位(day1/day2/day3,单位英寸)的数据集,需要按lot分组后分别计算每个分组下各日水位的最大值,输出每个lot对应各日最大值的精简数据集。

原有代码问题

你编写的代码存在两个核心问题:

  • dplyr管道流中直接调用df[which.max(df$day1),]是直接对原始全量数据集取子集,不会作用于group_by之后的分组
  • 仅用which.max取day1最大值对应的行,无法同时计算day2、day3各自的最大值,也没有处理NA值的情况

正确实现方案

方法1:tidyverse/dplyr方案(最简洁)

用summarise(across())批量对指定列计算最大值,同时设置na.rm = TRUE跳过NA值:

library(dplyr)

df_slim <- df %>%
  group_by(lot) %>%
  summarise(
    across(starts_with("day"), ~max(.x, na.rm = TRUE))
  ) %>%
  ungroup() # 不需要保留分组结构可加上

如果使用的dplyr版本较旧不支持across,可替换为summarise_at写法:

df_slim <- df %>%
  group_by(lot) %>%
  summarise_at(vars(starts_with("day")), ~max(., na.rm = TRUE)) %>%
  ungroup()

方法2:base R方案(无需加载第三方包)

用aggregate函数实现分组聚合:

df_slim <- aggregate(
  . ~ lot, 
  data = df, 
  FUN = function(x) max(x, na.rm = TRUE)
)

输出验证

两种方法运行后得到的df_slim和预期结果完全一致:

> df_slim
# A tibble: 5 × 4
  lot    day1  day2  day3
  <chr> <dbl> <dbl> <dbl>
1 id-1    1.5   2.2   1.2
2 id-2    4     4.7   4  
3 id-3    6.2   6.9   5.9
4 id-4    7    11.1   5.2
5 id-5    3.4   3.9   1.2

内容的提问来源于stack exchange,提问作者tchoup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:45:03