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

使用R统计数据框中连续年月内重复出现的名称及次数

解决方法(R语言)

核心思路

  1. 按年月从新到旧排序数据,确保检查顺序符合需求
  2. 去重每个年月下的唯一名称,避免重复计数干扰结果
  3. 对每个名称,从最新年月开始依次验证是否连续出现,遇到未出现的年月即停止统计
  4. 筛选出连续出现次数达标(示例为≥2次)的名称

代码实现

先加载依赖包:

library(dplyr)
library(zoo)

1. 示例数据(替换为你的实际数据即可)

df <- tibble(
  d = as.yearmon(c("Oct 2020", "Oct 2020", "Nov 2020", "Nov 2020", "Sep 2020", "Sep 2020")),
  x = c("bpa", "db", "bpa", "db", "svc", "bpa")
)

2. 预处理与连续次数计算

# 去重每个年月的唯一名称,并按年月从新到旧排序
unique_x_per_month <- df %>%
  distinct(d, x) %>%
  arrange(desc(d))

# 获取排序后的完整年月序列
sorted_months <- unique(unique_x_per_month$d)

# 统计每个名称的连续出现次数
result <- unique_x_per_month %>%
  group_by(x) %>%
  mutate(
    # 收集当前名称出现过的所有年月(从新到旧排序)
    x_months = list(sort(d, decreasing = TRUE))
  ) %>%
  mutate(consecutive_count = map_int(x_months, ~{
    count <- 0
    # 从最新年月开始依次检查是否存在
    for(m in sorted_months){
      if(m %in% .x){
        count <- count + 1
      } else {
        break # 遇到未出现的年月,终止计数
      }
    }
    count
  })) %>%
  # 筛选连续次数≥2的结果,去重并按次数排序
  filter(consecutive_count >= 2) %>%
  distinct(x, consecutive_count) %>%
  arrange(desc(consecutive_count))

结果说明

运行代码后,result会输出符合要求的结果:

  • bpa在Nov 2020、Oct 2020、Sep 2020连续出现,次数为3
  • db在Nov 2020、Oct 2020连续出现,次数为2
  • svc因未出现在最新的Nov 2020,被排除

该方案支持动态处理任意数量的年月,无需提前指定固定的月份范围。

内容的提问来源于stack exchange,提问作者Rupaa Ramesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:06:24