如何 select 按其他变量排序的最小 TRUE 值

How to select minimum TRUE values sorted by other variables

我有一组非常大的数据,按设施编号、年份和月份排序。在最后一列中,我有一组 TRUE/FALSE 语句。我设置了最后一列,以便对于每组唯一的(设施编号、年份和月份),该列将以 FALSE 开始,但过渡到 TRUE 的某个点(这在我的程序的其他地方确定)。

我想在最后一列从 FALSE 切换为 TRUE 的每个唯一集合(设施编号、年份和月份)中找到最小行号。

这是 table 的示例:

     fac_num year month     t
  1:       1 2017     1 FALSE
  2:       1 2017     1 FALSE
  3:       1 2017     1 FALSE
  4:       1 2017     1 FALSE
  5:       1 2017     1 FALSE
 ---                         
2466726:      62 2017     4  TRUE
2466727:      62 2017     4  TRUE
2466728:      65 2017     1  TRUE
2466729:      65 2017     5  TRUE
2466730:      65 2017     5  TRUE

到目前为止,我只能管理如何获得总体 TRUE 值的最低行数,而不是针对每个唯一的集合(设施编号、年份和月份)。

min(which(dat0a$t))

以上代码returns

64

哪个是(fac_num = 1,年 = 2017,月 = 1)中最低 TRUE 值的正确行号,但我想知道如何对任何(设施号)重复此操作、年和月)组合,而无需手动输入每个组合,因为有数百种可能的组合。

这是一个使用 dplyr 的解决方案:

library(dplyr)

dat0a %>%
  group_by(fac_num, year, month) %>%
  summarize(row_n = min(row_number()[t == TRUE]))

首先使用 group_by 设置您的组,然后在每个组中取最小值 row_number(),其中 t == TRUE