Как фильтровать переменную на основе одного критерия, одновременно объединяя другую информацию?

#r #dplyr #hierarchical-data #panel-data

#r #dplyr #иерархический-данные #панель-данные

Вопрос:

Эти данные представляют 3 человека. Я хотел бы отфильтровать людей, у которых была ошибка 5 хотя бы один раз.

 id  error
1   0
1   0
1   5
2   0
2   5
2   0
3   0
3   0
3   0

structure(list(id = structure(c(1, 1, 1, 2, 2, 2, 3, 3, 3), format.stata = "%9.0g"), 
        error = structure(c(0, 0, 5, 0, 5, 0, 0, 0, 0), format.stata = "%9.0g")), row.names = c(NA, 
    -9L), class = c("tbl_df", "tbl", "data.frame"))
  

Если я использую этот код:

 df %>% 
  group_by(id) %>% 
  filter(error > 0)
  

Как показано ниже, я получал бы только случаи возникновения ошибки, но я не получал бы данные до и после нее для одного и того же человека.

 id  error
1   5
2   5
  

Однако я хотел бы получить этот результат, поскольку я слежу за людьми с течением времени и хотел бы посмотреть, что произошло до и после

    id   error
    1   0
    1   0
    1   5
    2   0
    2   5
    2   0
 
  

Не мог бы кто-нибудь немного подсказать мне, пожалуйста?

Ответ №1:

Работает ли это:

 library(dplyr)
df %>% group_by(id) %>% filter(any(error == 5))
# A tibble: 6 x 2
# Groups:   id [2]
     id error
  <dbl> <dbl>
1     1     0
2     1     0
3     1     5
4     2     0
5     2     5
6     2     0
  

Ответ №2:

Мы могли %in% бы filter также использовать

 library(dplyr)
df %>%
    group_by(id) %>% 
    filter(5 %in% error)
  

-вывод

 # A tibble: 6 x 2
# Groups:   id [2]
#     id error
#  <dbl> <dbl>
#1     1     0
#2     1     0
#3     1     5
#4     2     0
#5     2     5
#6     2     0