Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 试图在数据帧中循环_R_Loops_Difftime - Fatal编程技术网

R 试图在数据帧中循环

R 试图在数据帧中循环,r,loops,difftime,R,Loops,Difftime,我正在尝试使用GPS数据计算总活动驱动力。我编写了一个循环,用于计算数据帧中两个连续点之间在值范围内的时间差,并在进行时求和 然而,最终的输出比预期的要小得多,以秒为单位,而不是数百小时,这让我相信它只是循环了几次,或者没有正确地求和值。我的编程知识主要来自Python,我是在R中正确地实现了这个想法,还是可以写得更好? 我的数据如下所示: DriveNo Date.and.Time Latitude Longitude 1 264 2014-02-01 12:12:05 4

我正在尝试使用GPS数据计算总活动驱动力。我编写了一个循环,用于计算数据帧中两个连续点之间在值范围内的时间差,并在进行时求和

然而,最终的输出比预期的要小得多,以秒为单位,而不是数百小时,这让我相信它只是循环了几次,或者没有正确地求和值。我的编程知识主要来自Python,我是在R中正确地实现了这个想法,还是可以写得更好? 我的数据如下所示:

DriveNo       Date.and.Time Latitude Longitude
1     264 2014-02-01 12:12:05 41.91605  12.37186
2     264 2014-02-01 12:12:05 41.91605  12.37186
3     264 2014-02-01 12:12:12 41.91607  12.37221
4     264 2014-02-01 12:12:27 41.91619  12.37365
5     264 2014-02-01 12:12:42 41.91627  12.37490
6     264 2014-02-01 12:12:57 41.91669  12.37610
是否有一种方法可以将每次迭代的结果保存到一个列表中,以便分析在值范围内可能出现问题的位置

datelist = taxi_264$Date.and.Time
dlstandard = as.POSIXlt(datelist)
diffsum = 0
for (i in range(1:83193))
{
  diff = difftime(dlstandard[i], dlstandard[(i+1)], units = "secs")
  diffsum = diffsum + diff
}

您可以使用
dplyr
中的
lead()
函数来避免循环:

库(dplyr)
diff您可以尝试:

diffsum <- as.numeric(sum(difftime(tail(dlstandard, -1), 
                                   head(dlstandard, -1), units = 'secs')))

diffsum欢迎使用堆栈溢出。请以纯文本格式包含一些示例数据。例如,
dlstandard
中有足够的行来生成一些输出。如果要对每行之间的差异求和,则只需从最后一行中减去第一行。因此,“lead()”函数不再需要i和i+1结构,但这段代码是否仍然计算整个连续值范围内的差值,还是只计算一次?出于某种原因,使用此选项会给我一个NA答案。@Frankyaygrr问题可能会发生,因为对于
dlstandard
中的最终条目,潜在客户将返回
NA
。我已经更新了我的代码,
lead
现在将返回与上一个值相同的值,这样差异将为零,并且不会对总和作出贡献。这起作用,并给我一个大致相当于28天的答案,这是研究发生的时间,然而,我只是在寻找出租车积极行驶的时间。是否有一种方法可以修改此代码以忽略大于1分钟的时间差时间值,这样就不会将它们添加到总的diffsum中?Thankyou@FrankYaygrrr尝试
diffsum