根据组最大值删除行

时间:2021-03-06 13:37:59

标签: r filter

RStudio:

假设我有一组数据:

# Circle  X    Y   velocity
1 A      21    8     0
2 A      32    17    4
3 A      23    32    5
4 B      22    4     0
5 B      43    12    10
6 B      12    0     2
7 C      12    4     0
.....

我希望过滤掉所有最大速度大于 9 的圆圈(例如,第 5 行在该点显示圆圈 B 的速度大于 9(圆圈 B 的最大速度),因此第 4-6 行应删除为他们都属于圈B)。有没有人知道如何在 Rstudio 中做到这一点?

2 个答案:

答案 0 :(得分:1)

试试这个:

 df<- data.frame(Circle = c('A','A','A','B','B','B','C'), 
                    X=c(21,32,23,22,43,12,12),
                    Y =c(8,17,32,4,12,0,4),
                    velocity=c(0,4,5,0,10,2,0))

df %>% group_by(Circle) %>% filter(max(velocity)<=9)

答案 1 :(得分:0)

一种方法是保留所有值都小于等于 9 的组。

library(dplyr)
df %>% group_by(Circle) %>% filter(all(velocity <= 9))
#Also
#df %>% group_by(Circle) %>% filter(!any(velocity > 9))

#  Circle     X     Y velocity
#  <chr>  <int> <int>    <int>
#1 A         21     8        0
#2 A         32    17        4
#3 A         23    32        5
#4 C         12     4        0

也可以用基数 R 和 data.table

#Base R
subset(df, ave(velocity <= 9, Circle, FUN = all))

#data table
library(data.table)
setDT(df)[, .SD[all(velocity <= 9)], Circle]