I have a data set which looks like the following (partially):
id name dummy
1 Jane 1
1 Jane 0
1 Jane 1
2 Mike 0
2 Mike 0
2 Mik
A possible solution:
subset(dat, as.logical(ave(dummy, id, FUN = any)))
# id name dummy
# 1 1 Jane 1
# 2 1 Jane 0
# 3 1 Jane 1
# 9 3 Tom 1
# 10 3 Tom 1
# 11 3 Tom 0
# 12 3 Tom 0
An alternative with data.table:
library(data.table)
setDT(dat)[, if (any(dummy)) .SD, by = id]
Or with dplyr:
library(dplyr)
dat %>%
group_by(id) %>%
filter(any(dummy))