用dplyr在保留行的前提下添加物种年月观测最大值列
使用dplyr实现分组观测次数最大值填充
要实现保留原数据所有行和列,同时新增列填充每个Species-Year-Month组的观测次数,直接用dplyr的group_by + mutate组合即可,无需summarise:
library(dplyr) # 示例数据 Sp <- data.frame(Species = c("A","A","A","A","A","A","A","A","A","A","A","B","B","B","B","B","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C"), Month= c("2","3","4","4","4","7","3","4","4","5","6","4","5","6","6","7","4","3","4","5","6","7","3","4","4","5","6","4","5","6","4","5","6","2","2","8","5","5"), Year= c("2018","2005","2006","2006","2006","2006","2008","2008","2008","2008","2018","2009","2009","2009","2018","2009","2009","2009","2009","2009","2018","2005","2005","2005","2006","2006","2005","2006","2005","2005","2005","2009","2009","2009","2018","2018","2018","2018")) # 新增分组观测次数列 Sp <- Sp %>% group_by(Species, Year, Month) %>% mutate(obs_max = n()) %>% ungroup()
关键逻辑说明
group_by(Species, Year, Month):按物种、年份、月份进行分组,确保后续计算仅针对同一组内的数据。mutate(obs_max = n()):n()函数在分组后会返回当前组的行数(即该组的观测次数),mutate会将这个值填充到该组的每一行,同时保留原数据的所有行和列。ungroup():可选操作,取消数据框的分组状态,避免后续操作受分组影响。
比如查看物种A在2006年4月的记录,该组共3行,对应的obs_max列值均为3,符合需求。
内容的提问来源于stack exchange,提问作者RGR_288
相关产品推荐
相关产品推荐

