2016-05-06 11 views
0

私は最大のtn値のプレディクタを探している、繰り返し測定値を持つデータセットを持っています。私はこの後に起こる措置には興味がない。最大値は、異なる患者について異なる日に生じる。最大値の後にデータセットを切り捨てます

ID day tn hb sofa 
1 1 7 85 NA 
1 2 NA NA NA 
1 3 35 80 13 
1 4 28 79 12 
2 1 500 NA 12 
2 2 280 80 9 
2 3 140 90 8 
2 4 20 90 7 
3 1 60 80 12 
3 2 75 75 10 
3 3 NA 75 NA 
3 4 55 84 7 

私はtn_最大を見つけることができます。

tn_max <- df %>% group_by(record) %>% summarise(tn_max = max(tn,na.rm=TRUE)) 

私は、各患者の最大TN後にデータセットを切り捨てることができますどのように? 私は以前同様の質問からこのコードを見つけましたが、私はそれがエラーを動作させることはできません。予期しない「:」「N_max =検索(DF(:」で

mod_df = df; 
    N_max = find(df(:,3) == max(df(:,3))); 
    N_max(1); 

    for N=1:size(df,3) 
    if df(N,1) < N_max 
    mod_df (N,:)=0; 
    end 
    end 
    mod_data_1(all(mod_data_1==0,1),:) = [] 

多くのおかげで、 アンヌマリー

+2

を、私はあなたが見つけたコードは、MATLABでだと思う... –

答えて

0

まず私は、任意のベクトルに対して、同じ長さのブールベクトルを返すことができる関数を作成し、その係数値が最大前発生した場合TRUEであり、そうでなければFALSEなる:

f <- function(x) 1:length(x) <= which.max(x) 

そしてIはIDによって定義tnの各サブベクトルには、この機能を適用する:

ind <- as.logical(ave(df$tn, df$ID, FUN=f)) 

最後に、私がしなければならないすべては、元のデータ・フレームの対応するサブセットを取ることである。

df[ind, ] 
+0

はありがとう@VincとGuillemot。私はこれが非常にエレガントに動作することがわかります。現時点では、tn構造体は数字で、 "unique.default(x、nmax = nmax)のエラー:unique()はベクトルにのみ適用されます"というエラーが表示されます。私はas.vectorを使用してベクトルに強制しようとしましたが、数値が残っていますが、まだエラーが発生します。私はこれを解決するために何ができるのか知っていますか?多くのありがとう、Annemarie – Annemarie

+0

申し訳ありません、私は[ave]を使用して[古典的な間違いをした](http://stackoverflow.com/questions/16681770/r-error-in-unique-defaultx-unique-applies-only-to-vectors) :私はそれを修正し、今すぐ動作するはずです。 –

+0

ありがとうございます@ Vincent Guillemot。もう1つ苦しい質問をすることはできますか?私はまだそれを動作させることができません、と私はtnのいくつかの欠損値(前と後の両方の最大値)があるためですか?助けるだろう "na.rm"タイプのmaneouvreはありますか?ありがとう、もう一度、Annemarie – Annemarie

0

あなたが試みることができる:

df %>% group_by(ID) %>% slice(seq_len(which(tn == max(tn,na.rm=TRUE)))) 
Source: local data frame [6 x 5] 
Groups: ID [3] 

    ID day tn hb sofa 
    (int) (int) (int) (int) (int) 
1  1  1  7 85 10 
2  1  2 15 84 12 
3  1  3 35 80 13 
4  2  1 500 76 12 
5  3  1 60 80 12 
6  3  2 75 75 10 
関連する問題