R агрегатный столбец, пока не будет выполнено одно условие - PullRequest
0 голосов
/ 04 августа 2020

, поэтому у меня есть фрейм данных такой формы:

ID   Var1   Var2
1     1      1
1     2      2
1     3      3
1     4      2
1     5      2
2     1      4
2     2      8
2     3      10
2     4      10
2     5      7

, и я хотел бы отфильтровать значения Var1 по группам для их максимального значения при условии, что максимальное значение Var2 не встретились. Это будет частью нового фрейма данных, содержащего только одну строку для каждого идентификатора, поэтому результат должен быть примерно таким:

ID   Var1
1     2
2     2

, поэтому функция должна фильтровать фрейм данных по максимуму, но учитывать только значения в строки до того, как Var2 достигнет максимума. Строки, содержащие сам максимум, не должны включаться, как и строки после максимума. Я попытался построить что-то с помощью while l oop, но ничего не вышло. Также я был бы благодарен, если в решении не используется data.table

Заранее спасибо

1 Ответ

1 голос
/ 04 августа 2020

Может быть, вы могли бы сделать что-то вроде этого:

DF <- structure(list(
  ID = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), 
  Var1 = c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L), 
  Var2 = c(1L, 2L, 3L, 2L, 2L, 4L, 8L, 10L, 10L, 7L)), 
  class = "data.frame", row.names = c(NA, -10L))

library(dplyr)

DF %>% group_by(ID) %>% 
  slice(1:(which.max(Var2)-1)) %>% 
  slice_max(Var1) %>% 
  select(ID, Var1)
#> # A tibble: 2 x 2
#> # Groups:   ID [2]
#>      ID  Var1
#>   <int> <int>
#> 1     1     2
#> 2     2     2

Создано 2020-08-04 пакетом REPEX (v0.3.0)

...