You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于R dataframe时间速度数据计算指定时段20分钟间隔行驶距离

你的积分思路是完全正确的,线性变化的速度对时间的积分对应行驶距离,用梯形积分法计算即可,以下是具体实现方案:

实现代码(R语言)

# 示例数据
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))

# 1. 定义目标时间范围与20分钟间隔断点
start_time <- as.POSIXct("2019-04-01 14:00:00")
end_time <- as.POSIXct("2019-04-01 15:00:00")
interval_breaks <- seq(start_time, end_time, by = "20 mins")

# 2. 合并原始时间点与区间断点,去重排序用于插值
all_time_points <- sort(unique(c(df$time, interval_breaks)))
# 保留有效插值范围的时间点
all_time_points <- all_time_points[all_time_points >= min(df$time) & all_time_points <= max(df$time)]

# 3. 线性插值得到所有时间点对应的速度
interp_speed <- approx(x = df$time, y = df$speed, xout = all_time_points)$y

# 4. 构造插值数据集,过滤目标时间段内的记录
interp_df <- data.frame(
  time = all_time_points,
  speed = interp_speed
)
interp_df <- interp_df[interp_df$time >= start_time & interp_df$time <= end_time, ]

# 5. 计算每小段时间的行驶距离:梯形法(平均速度 * 时长)
interp_df$duration_h <- as.numeric(difftime(lead(interp_df$time), interp_df$time, units = "hours"))
interp_df$distance_km <- (interp_df$speed + lead(interp_df$speed)) / 2 * interp_df$duration_h

# 6. 为每小段分配归属的20分钟区间
interp_df$interval <- cut(interp_df$time, breaks = interval_breaks, include.lowest = TRUE, right = FALSE)

# 7. 按区间汇总得到最终结果
result <- aggregate(distance_km ~ interval, data = interp_df, FUN = sum, na.rm = TRUE)

结果说明

运行代码后得到的result即为每个20分钟区间的行驶距离,单位为km,示例运行输出参考:

interval distance_km
1 [2019-04-01 14:00:00,2019-04-01 14:20:00)    1.779333
2 [2019-04-01 14:20:00,2019-04-01 14:40:00)    1.513611
3 [2019-04-01 14:40:00,2019-04-01 15:00:00]    1.319444

上述代码全部使用基础R函数即可运行,无需安装额外依赖。

内容的提问来源于stack exchange,提问作者Lerra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:24:07