计算数据框中的距离
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.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.approx
.
填充 NA
然后,使用 dplyr
个动词过滤数据框,并使用 cut
创建 20 分钟的序列。最终距离是 20 分钟时间范围内每 1 秒距离的总和。
我有一个大型数据框,其中一列包含时间,另一列包含速度测量值 (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.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.approx
.
然后,使用 dplyr
个动词过滤数据框,并使用 cut
创建 20 分钟的序列。最终距离是 20 分钟时间范围内每 1 秒距离的总和。