如何用tidyverse移除指定分组(V1=2、V1=5)的V2最大值行
问题描述
现有如下两列DataFrame:
V1 V2 1 10 1 56 1 72 1 37 2 59 2 29 2 105 2 93 3 53 3 40 3 84 3 3 4 62 4 34 4 18 4 42 5 38 5 92 5 79 5 25
需要使用tidyverse工具移除分组V1=2和V1=5中各自对应V2最大值所在的行,期望得到如下输出:
V1 V2 1 10 1 56 1 72 1 37 2 59 2 29 2 93 3 53 3 40 3 84 3 3 4 62 4 34 4 18 4 42 5 38 5 79 5 25
生成该DataFrame的代码如下:
df = data.frame(V1= rep(1:5, each=4), V2 = sample(1:100,20))
解决方案
使用tidyverse中的dplyr包即可实现需求,核心逻辑是按V1分组后,仅对指定分组过滤掉V2最大值对应的行:
library(tidyverse) df %>% group_by(V1) %>% filter(!(V1 %in% c(2,5) & V2 == max(V2))) %>% ungroup()
代码说明
group_by(V1):按V1字段进行分组filter(!(V1 %in% c(2,5) & V2 == max(V2))):设置过滤规则——仅当V1为2或5,且该行V2等于该组最大值时移除该行,其余情况保留所有行ungroup():取消分组,恢复为普通DataFrame结构
内容的提问来源于stack exchange,提问作者ag14
相关产品推荐
相关产品推荐

