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

R语言中按站点分组选取非连续日期以最大化站点-日期组合

需求说明

为按站点(Site)分组的日期数据抽取尽可能多的非连续日期,最大化站点与日期的有效组合,具体规则:

  • 单站点有4个及以上唯一日期时,抽取3个非连续日期
  • 单站点仅存在1个唯一日期时,直接保留该日期
  • 基于排序后日期的间隔筛选实现,避免相邻日期被同时选中
数据说明

输入数据集为uniqueSiteDate,包含两个核心字段:

  • Site:站点标识,文本类型
  • Date:观测日期,Date类格式
    数据集为站点-日期唯一对应结构,已按站点分组。
实现代码

首先加载依赖包:
library(dplyr)

执行分组筛选逻辑:

selected_date_df <- uniqueSiteDate |>
  arrange(Site, Date) |>
  group_by(Site) |>
  reframe(
    valid_dates = unique(Date),
    selected_dates = {
      n <- length(valid_dates)
      if (n == 1) return(valid_dates)
      res <- valid_dates[1]
      for (d in valid_dates[-1]) {
        if (length(res) >= 3) break
        if (d - tail(res, 1) > 1) res <- c(res, d)
      }
      res
    }
  ) |>
  unnest(selected_dates) |>
  select(Site, Date = selected_dates)
效果验证

以站点HP37P1B为例,其原始4个唯一日期按升序排序为2020-03-07、2020-03-12、2020-03-13、2020-03-14:

  1. 先选中第一个日期2020-03-07
  2. 下一个日期2020-03-12与上一个选中日期相差5天,非连续,加入选中集,当前选中数为2
  3. 下一个日期2020-03-13与上一个选中的2020-03-12相差1天,连续,跳过
  4. 下一个日期2020-03-14与上一个选中的2020-03-12相差2天,非连续,加入选中集,当前选中数达3,停止遍历
    最终输出该站点的3个非连续日期:2020-03-07、2020-03-12、2020-03-14,符合预期要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 17:15:04