使用 R 中的 dplyr 根据最大​​值删除 ID

Remove ID's based on their max value with dpylr in R

我有一个看起来像这样的数据框

value <- c(0,0.1,0.2,0.4,0,0.05,0.05,0.5)
time <- c(0,0,0,0,1,1,1,1)
ID <- c(1,2,3,4,1,2,3,4)

test <- data.frame(value, time, ID)

 value time ID
1  0.00    0  1
2  0.10    0  2
3  0.20    0  3
4  0.40    0  4
5  0.00    1  1
6  0.05    1  2
7  0.05    1  3
8  0.50    1  4

我想删除所有从未显示过高于 0.10 的值的 ID

我的新 data.frame 应该是这样的

 value time ID
3  0.20    0  3
4  0.40    0  4
7  0.05    1  3
8  0.50    1  4

非常感谢任何帮助

我们可以使用分组操作 any

library(dplyr)
test %>% 
  group_by(ID) %>% 
  filter(any(value  > 0.1)) %>%
  ungroup

-输出

# A tibble: 4 x 3
#  value  time    ID
#  <dbl> <dbl> <dbl>
#1  0.2      0     3
#2  0.4      0     4
#3  0.05     1     3
#4  0.5      1     4

在基础 R 中,您可以使用 subset + ave 删除那些 all 值小于 0.1 的 ID

subset(test, !ave(value <= 0.1, ID, FUN = all))

#  value time ID
#3  0.20    0  3
#4  0.40    0  4
#7  0.05    1  3
#8  0.50    1  4

data.table :

library(data.table)
setDT(test)[, .SD[!all(value <= 0.1)], ID]