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

基于双条件利用另一列最大值创建新列(R语言)

解决方案

首先修正你提供的原始数据框:原代码中各列长度不匹配(Sp6个元素、Site4个、date和N8个),无法正常创建data.frame。假设修正后的数据如下(保证各列长度一致):

Df <- data.frame(
  Sp = c(1,1,2,2,3,3,2,2), 
  Site = c("A", "B", "C", "D", "A", "B", "C", "D"), 
  date = c('2021-1-1','2021-1-2','2021-1-3','2021-1-4','2021-1-5','2021-1-6', "2021-03-01","2021-03-05"),
  N = c(2,5,9,4,14,7,3,11)
)

方法:使用dplyr分组计算

1. 按物种(Sp)分组

如果需求是同一物种下所有站点都显示该物种N最大值对应的日期(匹配你给出的示例结果逻辑),可以按Sp分组,用which.max(N)定位最大值所在行,提取对应日期后填充到组内所有行:

library(dplyr)

Df <- Df %>%
  group_by(Sp) %>%
  mutate(Dmax = date[which.max(N)]) %>%
  ungroup()

2. 按物种+站点(Sp+Site)分组

如果需求是每个物种在每个站点下单独找N最大值对应的日期,只需调整分组键为Sp和Site:

Df <- Df %>%
  group_by(Sp, Site) %>%
  mutate(Dmax = date[which.max(N)]) %>%
  ungroup()

特殊情况处理

如果同一分组内存在多个相同的N最大值,which.max()会返回第一个出现的最大值的位置。若需要提取所有最大值对应的日期,或选择最早/最晚日期,可以修改逻辑:

  • 获取所有最大值日期:Dmax = paste(date[N == max(N)], collapse = ", ")
  • 取最晚日期:Dmax = max(date[N == max(N)])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:10:52