簡體   English   中英

試圖循環通過 dataframe

[英]Trying to loop through a dataframe

我正在嘗試使用 GPS 數據計算總活動驅動程序。 我編寫了一個循環,旨在計算 dataframe 中兩個連續點在值范圍內的時間差,並將其相加。

然而,最終的 output 比預期的要小得多,以秒為單位而不是數百小時,這讓我相信它只是循環了幾次或沒有正確地對這些值求和。 我的編程知識主要來自 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來避免循環:

library(dplyr)

diff <- difftime(dlstandard, lead(dlstandard, 1, defaultValue=dlstandard), units="secs")
diffsum <- sum(diff)

請注意,以上是解決問題的矢量化方法,通常是使用 R 時的 go 方法。

你可以試試:

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

這將以秒為單位給出diffsum總和。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM