基于双条件利用另一列最大值创建新列(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
相关产品推荐
相关产品推荐

