计算数据框中的距离

Calculating distances in a datraframe

我有一个大型数据框,其中一列包含时间,另一列包含速度测量值 (km/h)。这是数据库的一个简短示例:

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))

有没有办法做一个新的数据框,从 2019-04-01 14:00:00 到 2019-04-01 15:00:00 每 20 分钟计算一次行驶距离?假设速度变化是线性的。我试图找到积分的解决方案,但不确定这是否是正确的方法。感谢您的帮助!

这是结合使用 zoo::na.approxdplyr 函数的解决方案。

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.approx.

填充 NA

然后,使用 dplyr 个动词过滤数据框,并使用 cut 创建 20 分钟的序列。最终距离是 20 分钟时间范围内每 1 秒距离的总和。