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

如何基于变量最大值筛选DataFrame?按月提取鸟类观测最多区域

提取每月鸟类观测数量最多的区域记录

你之前用df %>% group_by(MONTH) %>% max(n)的问题在于,这个写法只会返回每个月份的观测数量最大值,丢失了对应的区域信息和完整行数据。可以用以下两种dplyr的方法实现需求:

方法一:用slice_max直接取每组最大值行

这是dplyr专门用来提取组内最大/最小值行的函数,用法简洁:

library(dplyr)

# 提取每个月份中n最大的1行,with_ties=FALSE表示如果有多个相同最大值只保留第一行
result_df <- df %>%
  group_by(MONTH) %>%
  slice_max(n, n = 1, with_ties = FALSE) %>%
  ungroup() # 取消分组,恢复普通数据框格式

如果某个月份有多个区域观测数量相同且都是最大值,想保留所有这些行,把with_ties=FALSE改成with_ties=TRUE即可。

方法二:用filter筛选最大值行

通过筛选每组中观测数量等于该组最大值的行,实现需求:

result_df <- df %>%
  group_by(MONTH) %>%
  filter(n == max(n)) %>%
  ungroup()

这个写法会保留所有符合条件的行,如果只需要每个月份的一行最大值记录,再加一步slice(1):

result_df <- df %>%
  group_by(MONTH) %>%
  filter(n == max(n)) %>%
  slice(1) %>%
  ungroup()

测试示例

用你提供的测试数据验证:

df <- data.frame(
  MONTH = c(1,1,2,2,2,3),
  REGION = c("North(北部)", "South(南部)", "West(西部)", "South(南部)", "East(东部)", "North(北部)"),
  n = c(12,45,34,23,32,11)
)

运行上述任意一种方法,都会得到你想要的结果:

MONTHREGIONn
1South(南部)45
2West(西部)34
3North(北部)11

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:22:19