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

在R中将因子类型的F1圈速转换为带小数的时间格式求助

解决F1圈速数据(mm:ss.000格式)转换为数值类型的方案

我完全懂你遇到的这个问题——这种mm:ss.000格式的圈速数据确实没法直接用常规的时间函数转换,因为它不是完整的日期时间格式,而是纯时长。下面给你两种简单可靠的解决方案,转成总秒数后就能正常用ggplot绘图了!

先构造示例数据(和你的样本一致)

先把你的数据还原出来,方便测试:

f1_data <- data.frame(
  DriverId = c(1, 20),
  Q1 = factor(c("1:05.585", "1:04.655")),
  Q2 = factor(c("1:04.772", "1:07.354")),
  Q3 = factor(c("1:04.293", "1:04.123"))
)

方法一:Base R 自定义函数(无需额外包)

核心思路是把字符串拆成分钟和秒两部分,计算总秒数:

# 自定义转换函数
convert_laptime_to_seconds <- function(laptime) {
  # 拆分分钟和秒(把factor转成字符后拆分)
  time_parts <- strsplit(as.character(laptime), ":")
  # 分钟转秒 + 秒数部分,返回数值
  sapply(time_parts, function(x) as.numeric(x[1])*60 + as.numeric(x[2]))
}

# 把Q1/Q2/Q3列批量转换
f1_data[, c("Q1", "Q2", "Q3")] <- lapply(f1_data[, c("Q1", "Q2", "Q3")], convert_laptime_to_seconds)

# 检查转换结果,现在都是numeric类型了!
str(f1_data)

方法二:用lubridate包(更简洁)

lubridate专门处理时间相关数据,它的ms()函数可以直接识别mm:ss.ms格式,再转成总秒数:

library(lubridate)

# 转换函数
convert_laptime_lubridate <- function(laptime) {
  # ms()把字符串转成时长对象,period_to_seconds转成总秒数
  period_to_seconds(ms(as.character(laptime)))
}

# 批量转换列
f1_data[, c("Q1", "Q2", "Q3")] <- lapply(f1_data[, c("Q1", "Q2", "Q3")], convert_laptime_lubridate)

验证转换结果

转换后的数据应该是这样的,都是可用于分析的数值:

print(f1_data)
#   DriverId     Q1     Q2     Q3
# 1        1 65.585 64.772 64.293
# 2       20 64.655 67.354 64.123

用ggplot绘图示例

现在数据是数值类型了,随便怎么画都没问题,比如画车手在不同排位赛阶段的圈速对比:

library(ggplot2)
library(tidyr)

# 先转成长格式(ggplot偏好长数据)
f1_long <- pivot_longer(f1_data, cols = Q1:Q3, names_to = "Session", values_to = "Laptime")

# 绘制点图对比
ggplot(f1_long, aes(x = Session, y = Laptime, color = factor(DriverId))) +
  geom_point(size = 3) +
  labs(title = "F1 Qualifying Laptimes", x = "排位赛阶段", y = "圈速(秒)", color = "车手ID") +
  theme_minimal()

为什么之前的方法没用?

  • as.numeric()直接转factor:只会把factor的水平编号转成数值,完全不是你要的圈速值;
  • chron/POSIXlt:这两个包是处理带日期的完整时间(比如yyyy-mm-dd hh:mm:ss),而你的数据是纯时长,不在它们的处理范围内,所以转换失败很正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:05:55