计算1996-2019年F1澳大利亚大奖赛每年平均圈速的高效方法
解决方案
两种高效实现方式,均无需手动逐年份筛选,也不会生成冗余中间数据集:
基础R实现(无需安装额外依赖包)
直接使用内置的aggregate函数按年份分组计算平均秒数,代码如下:
# 按Year分组计算seconds均值,同时直接筛选1996-2019年数据 avg_lap <- aggregate(seconds ~ Year, data = Lap_data[Lap_data$Year %in% 1996:2019, ], FUN = mean, na.rm = TRUE) # 直接提取符合要求的x、y向量 x <- avg_lap$Year y <- avg_lap$seconds
参数na.rm = TRUE可自动跳过缺失的圈速记录,避免出现NA结果,无缺失值可删除该参数。
tidyverse实现(语法更简洁可读性更高)
如果已经安装tidyverse套件,用dplyr的分组汇总逻辑实现更直观:
library(dplyr) avg_lap <- Lap_data %>% filter(Year %in% 1996:2019) %>% # 筛选目标年份范围 group_by(Year) %>% # 按年份分组 summarise(avg_seconds = mean(seconds, na.rm = TRUE)) # 分组计算均值 # 提取结果向量 x <- avg_lap$Year y <- avg_lap$avg_seconds
两种方法对2万行规模的数据都是毫秒级运算,得到的x、y向量可直接用于plot(x,y)、cor(x,y)等后续分析。
内容的提问来源于stack exchange,提问作者Manbearpig
相关产品推荐
相关产品推荐

