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

如何基于distance列计算赛车圈数?优先用tidyverse实现

问题:基于行驶距离计算赛车圈数(tidyverse实现)

我有一个记录赛事信息的DataFrame,其中distance列记录了赛车在各时间点的累计行驶距离,数据示例如下:

df <- data.frame(id = rep(c("A"), each = 15), 
                 distance = seq(from = 1, to = 20, length.out = 15))

输出结果:

id  distance 
1   A  1.000000   
2   A  2.357143   
3   A  3.714286   
4   A  5.071429   
5   A  6.428571   
6   A  7.785714   
7   A  9.142857   
8   A 10.500000   
9   A 11.857143   
10  A 13.214286   
11  A 14.571429   
12  A 15.928571   
13  A 17.285714   
14  A 18.642857   
15  A 20.000000   

已知每圈长度为5单位,需要新增lap列标注每个数据点对应的行驶圈数,预期结果如下:

expected_df <- data.frame(id = rep("A", each = 15), 
                          distance = seq(from = 1, to = 20, length.out = 15), 
                          lap = c(1,1,1,2,2,2,2,3,3,3,3,4,4,4,4))

输出结果:

id  distance lap
1   A  1.000000   1
2   A  2.357143   1
3   A  3.714286   1
4   A  5.071429   2
5   A  6.428571   2
6   A  7.785714   2
7   A  9.142857   2
8   A 10.500000   3
9   A 11.857143   3
10  A 13.214286   3
11  A 14.571429   3
12  A 15.928571   4
13  A 17.285714   4
14  A 18.642857   4
15  A 20.000000   4

解决方案(tidyverse实现)

使用dplyr包的mutate()函数结合ceiling()向上取整函数即可实现,核心逻辑是将累计距离除以单圈长度后向上取整,得到当前圈数:

library(tidyverse)

# 加载数据
df <- data.frame(id = rep(c("A"), each = 15), 
                 distance = seq(from = 1, to = 20, length.out = 15))

# 新增lap列
df <- df %>%
  mutate(lap = ceiling(distance / 5))

# 查看结果
print(df)

逻辑说明

  • distance / 5:计算累计距离对应的圈数(含小数)
  • ceiling():对结果向上取整,确保只要距离超过n倍单圈长度(比如超过5),就进入第n+1圈,完全匹配预期的圈数划分规则

多赛车场景适配

如果数据包含多个赛车(多个id),只需添加group_by(id)确保每个赛车单独计算圈数:

df <- df %>%
  group_by(id) %>%
  mutate(lap = ceiling(distance / 5)) %>%
  ungroup()

内容的提问来源于stack exchange,提问作者Cecilia López

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:25:46