I have a dataframe:
df <- data.frame(
Group=c(\'A\',\'A\',\'A\',\'B\',\'B\',\'B\'),
Activity = c(\'Act1\',\'Act4\', \'Act3\',\'Act1\',
You need to wrap it any
library(dplyr)
df %>%
group_by(Group) %>%
filter(any(Activity == 'Act1') & any(Activity == 'Act2'))
# Group Activity
# <fct> <fct>
#1 B Act1
#2 B Act2
#3 B Act3
Using the same logic in base R option ave
df[as.logical(ave(df$Activity, df$Group,
FUN = function(x) any(x == 'Act1') & any(x == 'Act2'))), ]
You can get the same result using all
df %>%
group_by(Group) %>%
filter(all(c("Act1", "Act2") %in% Activity))
and similar with ave
df[as.logical(ave(df$Activity, df$Group,
FUN = function(x) all(c("Act1", "Act2") %in% x))),]
# Group Activity
#4 B Act1
#5 B Act2
#6 B Act3