#r #filter
#r #Фильтр
Вопрос:
Мне нужно отфильтровать id
s, в которых нет maximum score
точек. Вот мой пример набора данных выглядит так
df lt;- data.frame(id = c(1,1,1,1,1, 2,2,2,2, 3,3,3,3,3, 4,4,4,4,4, 5,5,5), score = c(0,1,2,0,1, 1,0,1,1, 0,1,2,3,3, 3,1,2,0,3, 0,1,0), max.score = c(2,2,2,2,2, 1,1,1,1, 4,4,4,4,4, 3,3,3,3,3, 2,2,2)) gt; df id score max.score 1 1 0 2 2 1 1 2 3 1 2 2 4 1 0 2 5 1 1 2 6 2 1 1 7 2 0 1 8 2 1 1 9 2 1 1 10 3 0 4 11 3 1 4 12 3 2 4 13 3 3 4 14 3 3 4 15 4 3 3 16 4 1 3 17 4 2 3 18 4 0 3 19 4 3 3 20 5 0 2 21 5 1 2 22 5 0 2
В этом фрейме данных мне нужно отфильтровать s, id
c(3,5)
потому id
max.score
что в них нет s. Желаемый результат был бы:
gt; df id score max.score 1 3 0 4 2 3 1 4 3 3 2 4 4 3 3 4 5 3 3 4 6 5 0 2 7 5 1 2 8 5 0 2
Есть какие-нибудь идеи? Спасибо
Комментарии:
1. Попробуй
df %gt;% group_by(id) %gt;% filter(!any(score %in% max.score[1])) %gt;% ungroup
2. Как
max.score
константа по группам, вы можете использоватьfilter(!(max.score %in% score))
для сгруппированных данных.