Фильтр по группам, где при максимальном значении одной переменной другая переменная равна определенному значению - PullRequest
3 голосов
/ 13 марта 2020

Я хочу отфильтровать группы, в которых при максимальном значении одной переменной другая переменная равна определенному значению.

У меня есть такие данные:

library(tidyverse)
df1 <- data.frame(grp = rep(letters[1:2],each=5),
                      day = 1:5,
                     value = c(0,5,7,1,1,5,8,5,3,0)) %>% 
group_by(grp)

   grp day value
1    a   1     0
2    a   2     5
3    a   3     7
4    a   4     1
5    a   5     1
6    b   1     5
7    b   2     8
8    b   3     5
9    b   4     3
10   b   5     0

И я хочу Фильтруйте по группам, где в max (day) значение равно 1.

Таким образом, результат будет выглядеть следующим образом:

  grp     day value
1 a         1     0
2 a         2     5
3 a         3     7
4 a         4     1
5 a         5     1

Приветствуются решения Data.table или dplyr. Спасибо!

1 Ответ

3 голосов
/ 13 марта 2020

Поскольку оно уже сгруппировано, просто примените filter, проверив, равно ли «значение», которое соответствует максимальному значению дня (which.max(day)), 1

library(dplyr)
df1 %>%
    filter(value[which.max(day)] ==1)
# A tibble: 5 x 3
# Groups:   grp [1]
#  grp     day value
#  <fct> <int> <dbl>
#1 a         1     0
#2 a         2     5
#3 a         3     7
#4 a         4     1
#5 a         5     1

или имеет два условия и завернуть с any

df1 %>% 
      filter(any(value ==1 & day == max(day)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...