R语言实现滚动条件计数:统计历史行中两列的出现次数
嘿,我懂你要实现的是滚动式条件统计——针对每一行数据,计算当前球队在之前的轮次里,已经在同一个场地出战过的次数对吧?这在分析球队主场/客场战绩趋势时特别实用,我用dplyr给你写个简洁易懂的实现方案:
1. 先确认你的原始数据生成代码
set.seed(123) test <- data.frame( Round = rep(1:5, times = 3), Team = rep(c("Team 1", "Team 2", "Team 3"), each = 5), Venue = sample(c("Venue A", "Venue B"), 15, replace = T) )
2. 用dplyr实现滚动统计
dplyr的分组和窗口函数天生适合做这种按组滚动的计算,步骤很清晰:
library(dplyr) # 处理数据,生成滚动统计列 test_with_count <- test %>% # 第一步:确保每个球队的记录按轮次从小到大排序,这是滚动统计的核心前提 arrange(Team, Round) %>% # 第二步:按「球队+场地」分组,这样我们只统计当前球队在同一场地的历史出现次数 group_by(Team, Venue) %>% # 第三步:用row_number()给分组内的行编号,减1就是当前行之前的出现次数 mutate(Previous_Venue_Occurrences = row_number() - 1) %>% # 取消分组,方便后续的其他操作 ungroup()
3. 查看结果
运行后你会看到新增的Previous_Venue_Occurrences列,就是你要的滚动统计值。比如Team 1的第5轮在Venue B,之前已经在这个场地打过2次(第1、2轮),对应的统计值就是2,完全符合你的需求:
print(test_with_count)
额外扩展:如果需要统计所有球队的历史场地使用次数
要是你想统计的是所有球队在当前轮次前,该场地总共被使用过的次数(而不是仅当前球队),只需要调整分组逻辑即可:
test_with_global_count <- test %>% arrange(Round) %>% group_by(Venue) %>% mutate(Global_Previous_Venue_Occurrences = row_number() - 1) %>% ungroup()
内容的提问来源于stack exchange,提问作者jimmyday87
相关产品推荐
相关产品推荐

