如何用dplyr获取分组后最大样本量对应的年份(解决NA问题)
修正代码实现各站点样本量最大年份识别
原代码返回NA的核心问题是逻辑错误:year[max(n)]中max(n)得到的是样本量的数值最大值,而非该最大值所在的行索引。当这个数值大于分组后数据的行数时,就会因索引超出范围返回NA。
修正方案1:取第一个样本量最大的年份
使用which.max(n)获取分组内样本量最大的行的索引,再提取对应年份:
library(dplyr) set.seed(42) tibble(site = sample(LETTERS, 100, replace = TRUE), year = sample(c(2000:2005), 100, replace = TRUE), n = sample(seq(1, 15, 1), 100, replace = TRUE)) %>% group_by(site) %>% mutate(maxYear = year[which.max(n)])
如果同一站点有多个年份样本量相同且均为最大值,该方法会返回第一个出现的年份。
修正方案2:返回所有样本量最大的年份
若需保留所有样本量最大的年份(用逗号分隔),可使用以下代码:
library(dplyr) set.seed(42) tibble(site = sample(LETTERS, 100, replace = TRUE), year = sample(c(2000:2005), 100, replace = TRUE), n = sample(seq(1, 15, 1), 100, replace = TRUE)) %>% group_by(site) %>% mutate(maxYear = paste(year[n == max(n)], collapse = ", "))
内容的提问来源于stack exchange,提问作者tnt
相关产品推荐
相关产品推荐

