大きなファイルがあり、異なるレコードの時間差を計算する必要があります。説明のために、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