2017-07-05 53 views
0

我有一個非常大的一組數據,按設施號,年份和月份排序。在最後一列中,我有一組TRUE/FALSE語句。我爲此設置了最後一列,以便對於每個唯一的一組(設施編號,年份和月份),該列將從FALSE開始,但以TRUE(在我的程序中的其他位置確定)轉換爲某個點。如何選擇按其他變量排序的最小TRUE值

我希望找到在每個獨特的(設施數,年份和月份),其中最後一列從開關到FALSE TRUE最小的行號。

下面是表的樣本:

 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 

到目前爲止,我已經能夠只管理如何獲得真正的價值最低的行數的整體,而不是每個一套獨特的(設施數,年和月)。

min(which(dat0a$t)) 

上面的代碼返回

64 

這是在最低真值正確的行數(fac_num = 1年= 2017年,月= 1),但我想知道如何爲任何(設施號碼,年份和月份)組合重複此操作,而無需手動輸入每個組合,因爲有數百個潛在組合。

+0

這將更容易解決一個更可重複的例子。你應該看看'dplyr'包。我認爲你正在尋找的東西是這樣的:'庫(dplyr) dat0a%>% GROUP_BY(fac_num,年,月)%>% 變異( RN = ROW_NUMBER(), rn_min =分鐘(RN)) ' – roarkz

+0

看起來你正在使用data.table。如果這是真的,你可以使用'dat0a [,which.max(t),by = fac_num]'。在基數R中,你可以做'彙總(t_fa_n_num,data = dat0a,which.max)'。這是有效的,因爲'which.max'將返回第一個觀察到的最大值的位置。 – lmo

回答

0

下面是使用dplyr一個解決方案:

library(dplyr) 

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

首先安裝使用group_by您的組,然後取各組內的最低row_number()其中t == TRUE

+0

謝謝!這工作完美! –