2017-07-05 10 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 

これまでのところ、私はなく、(施設数の各ユニークなセットのために、全体のTRUE値の最低の行番号を取得する唯一の方法を管理することができました、年、月)。

min(which(dat0a$t)) 

上記のコードは、(fac_num = 1、年= 2017、月= 1)における最小TRUE値の正しい行番号であるが、私は知りたい

64 

を返します数百の潜在的な組み合わせがあるので、すべての組み合わせを手動で入力する必要なく、任意の(施設番号、年、月)の組み合わせでこれをどのように繰り返すか。その後、各グループ内t == TRUE最小row_number()を取り、

library(dplyr) 

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

まずセットアップあなたのグループgroup_byを使用して:

+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では、 'aggregate(t〜fac_num、data = dat0a、which.max)'を実行できます。これは 'which.max'が最初に観測された最大値の位置を返すために働きます。 – lmo

答えて

0

はここdplyrを使用してソリューションです。

+0

ありがとうございました!これは完全に機能しました! –

関連する問題