#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