Фильтровать строки по двум критериям в dplyr - PullRequest
0 голосов
/ 10 июня 2018

Пример данных:

y <- c(sort(sample(0:100, 365,replace = T)),sort(sample(0:100, 365,replace = T)))
df <- data.frame(loc.id = rep(1:2,each = 365), day = rep(1:365,times = 2), y = y,ref.day = 250)

Я хочу выбрать все первые строки, где y> 20, y> 40, y> 60 и y> 80 для каждого loc.id

df %>% group_by(loc.id) %>% dplyr::filter(any(y > 20)) %>% # additional check
    dplyr::slice(unique(c(which.max(y > 20), which.max(y > 40),which.max(y > 60),which.max(y > 80)))) %>% ungroup() 

    # A tibble: 8 x 4
      loc.id   day     y ref.day
      <int> <int> <int>   <dbl>
    1      1    78    21     250
    2      1   154    41     250
    3      1   225    61     250
    4      1   288    81     250
    5      2    79    21     250
    6      2   147    41     250
    7      2   224    61     250
    8      2   300    81     250

Я хочу включить дополнительный оператор, который заключается в том, что если после нарезки day будет> ref.day, тогда выберите строку, в которой день равен ref.day.В этом случае это будет выглядеть так:

  # A tibble: 8 x 4
        loc.id   day    y ref.day
        <int> <int> <int>   <dbl>
    1      1    78    21     250
    2      1   154    41     250
    3      1   225    61     250
    4      1   288    81     250 # this row will not be selected. Instead row where day == 250 will be here instead 
    5      2    79    21     250
    6      2   147    41     250
    7      2   224    61     250
    8      2   300    81     250 # this row will not be selected. Instead row where day == 250 will be here instead
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...