我在高速公路上发生了一系列事故。我需要确定发生事故最多的x公里长。
在我的例子中,虚构的高速公路有100公里长,我想找出“最危险”的10公里长,事故最多的地方。
我想出了以下的..。
library(tidyverse)
df <- tibble(
id = seq(1, 100,1),
km = round(runif(100, 0, 100))
)
df %>%
mutate(
interval = cut_interval(km, n = 11)
) %>%
count(interval)问题是这种方法分析固定应力。例如,这种方法不分析从14公里到23公里范围内发生的事故数量。
我怎样才能找到事故最多的10公里范围呢?
我想我可以迭代并创建重叠范围,然后进行计数。不管怎样,有没有更简单或更直接的方法?有任何现有的包可以在这样的间隔内工作吗?
发布于 2022-07-28 16:23:25
试着按公里排列,然后取过去十分钟的滚动总和。你可以很容易地找到最大滚动和之后,并假设最大是前十公里。
library(tidyverse)
library(RcppRoll)
set.seed(11)
tibble(
id = seq(1, 100,1),
km = round(runif(100, 0, 100))) %>%
group_by(km) %>%
summarise(accidents = sum(id)) %>%
complete(km = 1:100, fill = list(accidents = 0)) %>%
arrange(km) %>%
mutate(rolling_sum = roll_sum(accidents, 10, fill = NA, align = "right")) %>%
slice(which.max(rolling_sum))
# # A tibble: 1 × 3
# km accidents rolling_sum
# <dbl> <dbl> <dbl>
# 1 25 41 1189发布于 2022-07-28 16:32:25
有92段10公里长的公路,从0:9到91:100。使用sapply和一个简单的逻辑测试,很容易获得这10公里长的每一段的事故数量:
mva <- sapply(0:91, function(x) length(which(df$km > x & df$km < (x + 10))))
mva
#> [1] 13 13 11 10 10 11 11 11 13 11 14 13 14 14 11 9 9 8 9 6 6 5 8
#> [24] 10 14 15 16 15 16 16 16 14 12 9 6 6 8 7 8 11 12 14 13 13 12 13
#> [47] 16 16 14 12 10 11 11 11 8 5 5 3 3 3 2 2 2 2 3 2 2 3 3
#> [70] 3 4 5 5 5 5 6 5 5 8 8 9 9 8 8 8 9 10 8 8 6 6 7要找到最危险的路段,我们可以:
which(mva == max(mva))
#> [1] 27 29 30 31 47 48我们可以看到,在27-36公里、29-38公里、30-39公里、31-40公里、47-56公里和48-57公里的路段上,每个路段都发生了16起事故。
https://stackoverflow.com/questions/73155790
复制相似问题