Here is an example using the anti_join() function.
library(dplyr)
Df <- data.frame(Participant = c("A", "A", "B", "B", "C", "C"),
catch = c(1, 0, 0, 1, 0, 1),
Other = c(4,2,4,1,3,5))
Df
#> Participant catch Other
#> 1 A 1 4
#> 2 A 0 2
#> 3 B 0 4
#> 4 B 1 1
#> 5 C 0 3
#> 6 C 1 5
BadRows <- Df |> filter(catch == 1, Other <= 3)
BadRows
#> Participant catch Other
#> 1 B 1 1
DfCln <- anti_join(Df, BadRows, by = "Participant")
DfCln
#> Participant catch Other
#> 1 A 1 4
#> 2 A 0 2
#> 3 C 0 3
#> 4 C 1 5
Created on 2022-06-01 by the reprex package (v2.0.1)