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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:08:31