尝试遍历数据框
Trying to loop through a dataframe
我正在尝试使用 GPS 数据计算总数 activity driver。我编写了一个循环,旨在计算数据帧中两个连续点之间在值范围内的时间差,并对其求和。
然而,最终输出比预期的要小得多,大约是秒而不是数百小时,这让我相信它只是循环了几次或者没有正确地求和值。我的编程知识主要来自 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()
函数来避免循环:
library(dplyr)
diff <- difftime(dlstandard, lead(dlstandard, 1, defaultValue=dlstandard), units="secs")
diffsum <- sum(diff)
请注意,以上是矢量化解决问题的方法,通常是使用 R 时的方法。
你可以试试:
diffsum <- as.numeric(sum(difftime(tail(dlstandard, -1),
head(dlstandard, -1), units = 'secs')))
这将给出 diffsum
作为秒数之和。
我正在尝试使用 GPS 数据计算总数 activity driver。我编写了一个循环,旨在计算数据帧中两个连续点之间在值范围内的时间差,并对其求和。
然而,最终输出比预期的要小得多,大约是秒而不是数百小时,这让我相信它只是循环了几次或者没有正确地求和值。我的编程知识主要来自 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()
函数来避免循环:
library(dplyr)
diff <- difftime(dlstandard, lead(dlstandard, 1, defaultValue=dlstandard), units="secs")
diffsum <- sum(diff)
请注意,以上是矢量化解决问题的方法,通常是使用 R 时的方法。
你可以试试:
diffsum <- as.numeric(sum(difftime(tail(dlstandard, -1),
head(dlstandard, -1), units = 'secs')))
这将给出 diffsum
作为秒数之和。