我有一個大資料框,其中一列是時間,第二列是速度測量值(公里/小時)。這是資料庫的一個簡短示例:
df <- data.frame(time = as.POSIXct(c("2019-04-01 13:55:18", "2019-04-01 14:03:18",
"2019-04-01 14:14:18", "2019-04-01 14:26:55",
"2019-04-01 14:46:55", "2019-04-01 15:01:55")),
speed = c(4.5, 6, 3.2, 5, 4, 2))
有沒有辦法做一個新的資料框,它計算每 20 分鐘行駛的距離,從 2019-04-01 14:00:00 到 2019-04-01 15:00:00?假設速度變化是線性的。我試圖用積分找到解決方案,但不確定這是否是正確的方法。謝謝您的幫助!
uj5u.com熱心網友回復:
這是使用zoo::na.approx和dplyr功能組合的解決方案。
library(zoo)
library(dplyr)
seq = data.frame(time = seq(min(df$time),max(df$time), by = 'secs'))
df <- merge(seq,df,all.x=T)
df$speed <- na.approx(df$speed)
df %>%
filter(time >= "2019-04-01 14:00:00" & time < "2019-04-01 15:00:00") %>%
mutate(km = speed/3600) %>%
group_by(group = cut(time, breaks = "20 min")) %>%
summarise(distance = sum(km))
這使:
# A tibble: 3 x 2
group distance
<fct> <dbl>
1 2019-04-01 14:00:00 1.50
2 2019-04-01 14:20:00 1.54
3 2019-04-01 14:40:00 1.16
說明:
第一步是創建一個時間框架序列來計算兩個時間點 ( seq)之間的速度。然后將序列與資料框合并,并使用 填充 NA na.approx。
然后,使用dplyr動詞過濾資料框,并使用cut. 最終距離是 20 分鐘時間范圍內每 1 秒距離的總和。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/370530.html
上一篇:如何在熊貓日期列中選擇月份?
