0

大きなファイルがあり、異なるレコードの時間差を計算する必要があります。説明のために、MWE が提供する

データ データ フレーム df:

       st   time     from  to   type   size flg         fid     src       dst  no   ID
        + 0.163944    2    1      a     40  -------      1      2.4      5.4   0    10
        + 0.215400    2    1      a     40  -------      1      2.4      5.4   1    28
        + 0.239528    2    1      t     40  -------      1      2.4      5.4   0    37
        + 0.287784    2    1      t   1040  -------      1      2.4      5.4   1    62
        + 0.287784    2    1      t   1040  -------      1      2.4      5.4   2    63
        ..........    .  .      ...   .. .......      .       .        ..   .    ..
        # here should be some more lines with different value such as
        - 0.487784    3    0      t  1040 -------        4      2.8      7.4   2    23
        # the above line will be filtered out by the conditions-just ignore it
        ..........    .  .      ...   .. .......      .       .        ..   .    .. 
        r 0.188072    0    5      a    40 -------      1         2.4      5.4   0    10
        r 0.239528    0    5      a    40 -------      1         2.4      5.4   1    28
        r 0.263656    0    5      t    40 -------      1         2.4      5.4   0    37
        r 0.317128    0    5      t  1040 -------      1         2.4      5.4   1    62
        r 0.318792    0    5      t  1040 -------      1         2.4      5.4   2    63

条件 1: 「+」で始まる各レコードの「ID」は一意になります。「src」、「dst」、および「from」が条件に追加されます。この情報に基づいて、「時間」フィールドが配列の開始として記録されます (つまり、配列[ID]=時間)。

条件 2: 「r」で始まる各レコードについて、「ID」がチェックされます。この情報に基づいて、必要な時差は次のようになります: 現在の「時間」 - 配列[ID]。

Rコードを作成しましたが、うまくいきました。ただし、固定の src および dst 値を使用しています。src の形式: xy 。x は常に =2 で、y は変化します (つまり、y=0,1,2,3,4,.......)。また、dst: zf 、ここで z と f は変化しています (つまり、4.3,5.2,6.100.... の可能性があります)。

R コード:

src<-"2.4"  # this value should be automated like 2.y. Any suggestions !!! 
dst<-"5.4"  # this value should be automated like z.f
ReqTime<-0
timeHolder<-c()

#start
start<-df[df[, "st"] == "+" &  
        df[, "from"] == 2 &  
        # the src and dst should be automated 
        df[, "src"] == src &        
        df[, "dst"] == dst,]

timeHolder[start$ID]<-start$time

 #end
 end<-df[df[, "st"] == "r" &  
          df[, "from"] == 0 &
          df[, "src"] == src &
          df[, "dst"] == dst,]


if(!is.null(timeHolder[end$ID])){
  ReqTime<- end$time- timeHolder[end$pktID]

 }

cat("Time from ",src,"--",dst,": ",ReqTime,"\n")

}

期待される出力:

Time from  2.4 -- 5.4 :  0.024128 0.024128 0.024128 0.029344 0.031008 

または、次のような出力を得ることができれば大歓迎です:

Time from  2.4 -- 5.4 :  mean( 0.024128 0.024128 0.024128 0.029344 0.031008) which is =0.0265472
4

1 に答える 1