如何 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
。
我有一组非常大的数据,按设施编号、年份和月份排序。在最后一列中,我有一组 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
。