Фильтровать, только если условие действует в течение времени в г - PullRequest
0 голосов
/ 26 марта 2020

Я хочу понять, как я могу использовать функцию filter после группировки по идентификатору. Я хочу отфильтровать идентификатор, где DV меньше 0,1 во все время> 0. Время 0 - это базовая линия.

Ниже приведен пример для моих начальных данных:

Input

Окончательный ожидаемый результат

Final output

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Поддельные данные, так как у меня нет ваших.

dat <- data.frame(
  ID   = c(1,1,1,          2,2,2,          3,3,3),
  TIME = c(0:2,            0:2,            0:2),
  DV   = c(100,0.01,0.01,  100,0.05,0.09,  100,0.01,5)
)

dat %>%
  group_by(ID) %>%
  filter(all(TIME < 1 | DV < 0.1)) %>%
  ungroup()
# # A tibble: 6 x 3
#      ID  TIME     DV
#   <dbl> <int>  <dbl>
# 1     1     0 100   
# 2     1     1   0.01
# 3     1     2   0.01
# 4     2     0 100   
# 5     2     1   0.05
# 6     2     2   0.09
0 голосов
/ 27 марта 2020
THRESHOLD = 0.1
INITIAL_TIME = 0
filter(dat, ((DV < THRESHOLD) | (TIME == INITIAL_TIME)) & 
    (!ID %in% distinct(filter(dat,(DV > THRESHOLD) & 
    (TIME > INITIAL_TIME)) %>% select(ID))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...