Вложенные фильтры в dplyr - PullRequest
       10

Вложенные фильтры в dplyr

0 голосов
/ 06 февраля 2020

Сначала я пытаюсь отфильтровать наблюдение, а затем использовать это наблюдение для дальнейшей фильтрации данных.

Регулярное выражение:

library(dplyr)

set.seed(10)

  df <- data.frame(
    nm = LETTERS[seq( from = 1, to = 20 )]
    ,vl = rnorm(20, 100, 1)
  )

df$prctl = cume_dist(df$vl)

Я сделал это в 2 этапа, сначала фильтрация для наблюдения:

  obs <- df %>%
    filter(nm == "M") %>%
    pull(prctl)

Затем используйте значение obs для дальнейшей фильтрации:

  df %>%
    filter(
      between(
        x = prctl
        ,left = obs - 0.05
        ,right = obs + 0.05
      )
    )

Это работает, но я чувствую, что могут быть более элегантные способы сделать это. Очевидно, что я могу заменить obs в последнем блоке фактическим кодом, но это будет означать, что код для левого и правого нужно будет оценить дважды.

Какие-нибудь изящные обходные пути для этого? Приветствия

1 Ответ

0 голосов
/ 06 февраля 2020

Вы можете сохранить значение prctl во временной переменной (чтобы избежать повторной оценки одного и того же) и использовать его для создания значений left и right для between до filter.

library(dplyr)
df %>% filter({i = prctl[nm == "M"]; between(prctl, i - 0.05, i + 0.05)})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...