2016-12-09 10 views
0

ここ トラブル

 PERSON_ID   EVENT 
    1 10000000001 LST_Mammo_EPI 
    2 10000000001   EPI 
    3 10000000002   BC1 
    4 10000000002   R_B 
    5 10000000002   BC2 
    6 10000000002   DEATH 
    7 10000000002   EPI 
    8 10000000004 FST_Mammo_FUP1 
    9 10000000004  OV1_FUP1 
    10 10000000004   BC1 
    11 10000000004 LST_Mammo_EPI 
    12 10000000004   EPI 
    13 10000000004  OV2_FUP1 
    14 10000000004 LST_Mammo_FUP1 
    15 10000000004   FUP1 
    16 10000000004   BC2 
    17 10000000004   FUP2 
    18 10000000005 LST_Mammo_EPI 
    19 10000000005   EPI 
    20 10000000007   BC1 
    21 10000000007   BC2 
    22 10000000007   DEATH 
    23 10000000010   DEATH 
    24 10000000826 FST_Mammo_FUP1 
    25 10000000826   BC1 
    26 10000000826   L_B 
    27 10000000826 LST_Mammo_EPI 
    28 10000000826 LST_Mammo_FUP1 
    29 10000000826   BC2 
    30 10000000826   R_B 
    31 10000000826   EPI 
    32 10000000826  OV1_FUP1 
    33 10000000826  OV2_FUP1 
    34 10000000826  OV2_FUP2 
    35 10000000826   FUP1 
    36 10000000826   FUP2 
    37 10000000827   DEATH 
    38 10000000830   BC1 
    39 10000000830   DEATH 
    40 10000000844 LST_Mammo_EPI 

は、だから私はのは、一人一人のために、特定の二つの事象の間で任意のデータを言わせてもらうためにデータのサブセットを取得する関数を書いた私のデータベースです

node <- function(proxis, fulle, database){ 

    result <- NULL 

    for (ID in unique(database$PERSON_ID)){ 
    person <- subset(database, database$PERSON_ID == ID) 
      a <- which(person $EVENT == fulle) 

     if (length(a) == 0){ 
      next} else { 

     person <- person[c(1:a),] 
      b <- which(person$EVENT == proxis) 

      if (length(b) == 0) { 
      next} else{ 

      person <- person[c(b:a),] 
       a <- which(person$EVENT == "OV") 
       b <- which(person$EVENT == "BC1") 
       c <- which(person$EVENT == "BC2") 
      if (min(a,b,c) != 0) {next 
      }else{ 
       result <- rbind(result,person) 

       }}}} 

    result 
} 

hello <- node("BC1","BC2",test) 

しかし、これは私にNULL行列を与えると私は特定の人のためのforループせずに試験したとき、それは正しく私のBC1およびBC2

私は考えていsomethの間でデータを提供しますブレークや結果行列の割り当てに間違っている... 誰も洞察力を与えることができますか?

+0

のいずれかのために不足している場合、これはエラーがスローされます期待される出力? – mtoto

+0

if(min(a、b、c)!= 0)をif(min(長さ(a)、length(b)、length(c))= 0に変更して固定しました。 BC1とBC2の間に行が必要な場合、BC1とBC2の間にイベントOVを設定しないでください。 hello < - node( "BC1"、 "BC2"、test)のように – jayinbluecity

答えて

1

PERSON_ID 2の間のイベントの行を取得するために、我々は

node <- function(data,event1, event2) { 
     do.call(rbind, lapply(unique(data$PERSON_ID), function(x) 
        data[with(data, which(PERSON_ID == x & EVENT == event1) : 
            which(PERSON_ID == x & EVENT == event2)), ])) 
} 

注関数を作成することができます:event1event2はあなたが何であるかをPERSON_ID

+1

これは簡単で簡単ですが、上記の私の制限のために私は私の使用を終了しました。ありがとうtho! – jayinbluecity