0
我有大文件,我需要计算不同记录的时差。为了说明,提供MWE在R中自动计算
的数据的数据帧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:x.y的格式,其中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
你的方法已接近完成。然而,在DF中DF $ st可以是(“+”,“ - ”,“r”),如何将它包含为条件?另外如果我想添加更多的条件,如DF $大小== 1040,不确定它适用于聚合,除非保持重新聚合。这就是为什么我把条件分开变量(即开始和结束)。也许聚合在未来的要求和修正中不会灵活!以前还没有用过聚合物! – SimpleNEasy
为了检查结果,我试图在你的方法中做到这一点。我做了更多条件的第一个聚合。然后我将更多的过滤器添加到聚合数据。然后我试图将重新聚合放在列表中或计算平均值。我得到的“参数意味着不同的行数错误”。在上面的示例数据的工作(我猜是因为它是理想的每个“+”有“R”,但大文件不起作用。请参阅我的更新你的答案。 – SimpleNEasy
这就是为什么我试图避免使用聚合和使用我上面的逻辑 – SimpleNEasy