Вы можете сделать это несколькими способами.
В базе R:
subset(test, !ave(fruit == 'apple', name, FUN = any))
# name fruit
#4 Justin pineapple
#5 Justin grape
Использование dplyr
test %>% group_by(name) %>% filter(!any(fruit == 'apple'))
Или data.table
setDT(test)[, .SD[!any(fruit == 'apple')], name]
Другой вариант в базе R без группировки может быть
subset(test, !name %in% unique(name[fruit == "apple"]))
data
test <- data.frame(name = c('Jack', 'Jack', 'Jack', 'Justin', 'Justin'),
fruit =c('pineapple', 'apple', 'grape', 'pineapple', 'grape'))