Вы отфильтровываете случаи, когда v1
для любой конкретной строки не равно ни одной из трех строк. Это не то, чего вы пытаетесь достичь - вы хотите сохранить только v2
группы, в которых все три строки представлены в v1
. Способ достижения этого:
df %>% group_by(v2) %>%
filter(all(c('c#', 'html', 'python') %in% v1))
Сначала мы группируем по v2, затем фильтруем эти группы так, чтобы в них входили только те, в которых all
три строки %in%
вектор v1
s этой группы.
Обратите внимание, что порядок для команды %in%
обратный по сравнению с вашим кодом, потому что нам все равно, есть ли в v1
другие случаи, нам важно, чтобы все три случая были представлены в v1
- если мы также хотите исключить все случаи, когда v1
не входит в эти три, у вас должны быть оба направления, как в следующем примере:
df<-rbind(df,data.frame(v1="moose",v2="klaas"))
df %>% group_by(v2) %>%
filter(all(c('c#', 'html', 'python') %in% v1), v1 %in% c('c#', 'html', 'python'))
# A tibble: 3 x 2
# Groups: v2 [1]
v1 v2
<fct> <fct>
1 c# klaas
2 html klaas
3 python klaas