Я застрял, пытаясь подмножить некоторые данные панели, то есть идентификаторы внутри группы, используя dplyr
.
Я хочу точно определить все id
в каждой группе, grp
, которая имеет ряд NUM
с минимальным значением меньше 2 и максимальным значением больше 2. Ниже я построил минимальный рабочий пример, который должен иллюстрировать проблема.
Я работал с filter()
, row_number() == c(1,n())
и пытался разделить их и объединить, то есть разные типы _join
, снова вместе, но я застрял, и теперь я обращаюсь за помощью к сообществу SO.
Что я имею
tibble
вот так,
df <- tibble(id = rep(0:1, c(8, 13)), grp = rep(c("01", "02"), c(13, 8)),
NUM = c(-4, -3, -2, -1, 1, 2, 3, 4, -3, -2, -1,
1, 2, -3, -2, -1, 1, 2, 3, 4, 5)) %>% group_by(id, grp)
df %>% print(n=21)
#> # A tibble: 21 x 3
#> # Groups: id, grp [3]
#> id grp NUM
#> <int> <chr> <dbl>
#> 1 0 01 -4
#> 2 0 01 -3
#> 3 0 01 -2
#> 4 0 01 -1
#> 5 0 01 1
#> 6 0 01 2
#> 7 0 01 3
#> 8 0 01 4
#> 9 1 01 -3
#> 10 1 01 -2
#> 11 1 01 -1
#> 12 1 01 1
#> 13 1 01 2
#> 14 1 02 -3
#> 15 1 02 -2
#> 16 1 02 -1
#> 17 1 02 1
#> 18 1 02 2
#> 19 1 02 3
#> 20 1 02 4
#> 21 1 02 5
Что я пытаюсь получить / желаемый результат
df_out <- tibble(id = rep(0:1, c(9, 8)),
grp = rep(c("01", "02"), c(9, 8)),
NUM = c(-4, -3, -2, -1, 1, 2, 3,
4, 5, -3, -2, -1, 1, 2, 3, 4, 5)) %>% group_by(id, grp)
df_out
#> # A tibble: 17 x 3
#> # Groups: id, grp [3]
#> id grp NUM
#> <int> <chr> <dbl>
#> 1 0 01 -4
#> 2 0 01 -3
#> 3 0 01 -2
#> 4 0 01 -1
#> 5 0 01 1
#> 6 0 01 2
#> 7 0 01 3
#> 8 0 01 4
#> 9 1 02 -3
#> 10 1 02 -2
#> 11 1 02 -1
#> 12 1 02 1
#> 13 1 02 2
#> 14 1 02 3
#> 15 1 02 4
#> 16 1 02 5