R聚合列直到满足一个条件

R aggregate column until one condition is met

所以我有一个这种形式的数据框:

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 仅包含一行的新数据框的一部分,因此结果应该是这样的:

ID   Var1
1     2
2     2

所以函数应该过滤数据帧的最大值,但只考虑 Var2 达到最大值之前的行中的值。不应包含包含最大值本身的行,因此不应包含最大值之后的行。 我尝试用 while 循环构建一些东西,但没有成功。另外,如果解决方案不使用 data.table

,我将不胜感激

提前致谢

也许你可以这样做:

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

reprex package (v0.3.0)

于 2020-08-04 创建