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

公共车站自行车分钟级数量序列及关联时间参数技术咨询

嘿,我看你已经在处理公共车站的自行车时序数据了,还贴心地加了any_change列来追踪下一次数量变化的剩余时间——这思路很棒!我来帮你梳理下这个数据集里关于「自行车取放剩余分钟数」的分析方向,还有一些实用的代码技巧~

数据集构建与输出

首先把你的数据集和处理代码整理清楚,方便后续分析:

# 初始数据集构建
num_biks <- data.frame(
  num_bikes = c(7, 7, 8, 8, 9, 9, 10, 8, 8, 7, 7, 9),
  mins_until_arrival = c(2, 1, 2, 1, 2, 1, 5, 4, 3, 2, 1, NA),
  mins_until_taken = c(7, 6, 5, 4, 3, 2, 1, 1, 1, NA, NA, NA)
)

# 添加any_change列:距离下一次自行车数量变化的剩余分钟数
num_biks <- cbind(num_biks, any_change = unlist(lapply(rle(num_biks$num_bikes)$lengths, seq, by = -1)))

# 查看最终数据集
num_biks

输出结果:

> num_biks
   num_bikes mins_until_arrival mins_until_taken any_change
1          7                  2                7          2
2          7                  1                6          1
3          8                  2                5          2
4          8                  1                4          1
5          9                  2                3          2
6          9                  1                2          1
7         10                  5                1          1
8          8                  4                1          2
9          8                  3                1          1
10         7                  2               NA          2
11         7                  1               NA          1
12         9                 NA               NA          1

1. 先明确各个字段的核心含义

  • num_bikes:当前分钟车站的自行车实际数量
  • mins_until_arrival:距离**下一辆自行车被放入(到达车站)**的剩余分钟数,NA表示当前没有已知的即将到达的自行车
  • mins_until_taken:距离下一辆自行车被取走的剩余分钟数,NA表示当前没有已知的即将被取走的自行车
  • any_change:你自定义的字段,通过rle()(游程编码)计算出的距离**任意数量变化(不管是取还是放)**的剩余分钟数

2. 围绕取放剩余分钟数的核心分析方向

2.1 匹配“特定变化”与“任意变化”,明确下一次变化类型

你可以通过对比mins_until_arrival/mins_until_taken和any_change的数值,判断每一分钟的下一次数量变化到底是来自自行车放入还是取走:

library(dplyr)

num_biks <- num_biks %>%
  mutate(next_change_type = case_when(
    mins_until_arrival == any_change ~ "自行车放入",
    mins_until_taken == any_change ~ "自行车取走",
    TRUE ~ "未知变化"
  ))

# 查看关键字段的对应关系
num_biks %>%
  select(num_bikes, any_change, mins_until_arrival, mins_until_taken, next_change_type)

比如第7行,any_change=1且mins_until_taken=1,对应下一分钟数量从10降到8,确实是自行车被取走,这个判断逻辑是成立的。

2.2 分析“无预期取放”的突发行为

看那些mins_until_arrival和mins_until_taken都是NA的行(比如第12行),此时any_change=1说明下一分钟数量会变化,但没有提前的取放预期——这类情况属于突发的取放行为,你可以统计这类情况的占比,或者看看这类变化的数量波动幅度:

# 统计突发变化的占比
sudden_change_ratio <- nrow(num_biks[is.na(num_biks$mins_until_arrival) & is.na(num_biks$mins_until_taken), ]) / nrow(num_biks)
cat("突发取放行为占比:", round(sudden_change_ratio * 100, 2), "%\n")

# 查看突发变化的数量波动
sudden_changes <- num_biks %>%
  filter(is.na(mins_until_arrival) & is.na(mins_until_taken)) %>%
  mutate(next_num_bikes = lead(num_bikes)) %>%
  select(num_bikes, next_num_bikes, any_change)

sudden_changes

2.3 统计取放行为的时间间隔规律

通过分析mins_until_arrival和mins_until_taken的分布,你可以了解车站自行车补充和被取走的频率:

# 自行车放入行为的时间间隔统计
cat("自行车放入的时间间隔统计:\n")
summary(num_biks$mins_until_arrival[!is.na(num_biks$mins_until_arrival)])

# 自行车取走行为的时间间隔统计
cat("\n自行车取走的时间间隔统计:\n")
summary(num_biks$mins_until_taken[!is.na(num_biks$mins_until_taken)])

2.4 关联当前车量与取放剩余时间的关系

你可以探索当前自行车数量和取放剩余时间的相关性:比如车多的时候是不是更容易被取走(mins_until_taken更短),车少的时候是不是更容易有车补充(mins_until_arrival更短):

# 箱线图:当前车量 vs 取走剩余时间
boxplot(mins_until_taken ~ num_bikes, 
        data = num_biks[!is.na(num_biks$mins_until_taken), ],
        main = "当前自行车数量 vs 距离下一次取走的剩余分钟数",
        xlab = "当前自行车数量", ylab = "剩余分钟数")

# 箱线图:当前车量 vs 放入剩余时间
boxplot(mins_until_arrival ~ num_bikes, 
        data = num_biks[!is.na(num_biks$mins_until_arrival), ],
        main = "当前自行车数量 vs 距离下一次放入的剩余分钟数",
        xlab = "当前自行车数量", ylab = "剩余分钟数")

3. 代码优化小技巧

你用rle()生成any_change的逻辑没问题,但可以用dplyr的窗口函数让代码更简洁易读:

num_biks <- num_biks %>%
  # 用游程编码分组,标记连续相同车量的时段
  group_by(change_grp = with(rle(num_bikes), rep(seq_along(lengths), lengths))) %>%
  # 反向生成剩余变化分钟数
  mutate(any_change = rev(row_number())) %>%
  ungroup() %>%
  select(-change_grp)

这样避免了lapply和unlist的嵌套,代码可读性更强~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:44:34