在R语言中如何按分类变量提取某列最大值对应的行
按分组提取最大值对应的所有行
假设我们有如下数据框:
df <- data.frame(a = c("A","A","A","B","B","C","C","C"), b= c(1,2,2,2,3,2,3,3))
需要按列a的每个分类,提取列b中最大值对应的所有行,最终得到如下结果:
df1 <- data.frame(a = c("A","A","B","C","C"), b= c(2,2,3,3,3))
方法一:Base R 实现
无需额外安装包,直接用基础R代码即可完成:
# 计算每个a分组对应的b的最大值 group_max <- tapply(df$b, df$a, max) # 筛选出b等于对应分组最大值的行 df1 <- df[df$b == group_max[df$a], ] # 重置行名(可选,让结果更整洁) rownames(df1) <- NULL
方法二:dplyr 包实现
如果习惯使用tidyverse生态的代码风格,推荐用dplyr处理:
# 先加载dplyr包(首次使用需先安装:install.packages("dplyr")) library(dplyr) df1 <- df %>% group_by(a) %>% filter(b == max(b)) %>% ungroup() # 若需要将结果转为普通data.frame而非tibble,可添加: # df1 <- as.data.frame(df1)
内容的提问来源于stack exchange,提问作者starski
相关产品推荐
相关产品推荐

