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

R语言按时间或索引区间创建日分组分类变量

解答

两种实现方式都可以完成分组标记需求,你可以根据自己的数据质量情况选择对应方案:

方案1:按行索引区间规则生成ID(推荐,逻辑最简)

该方案适用于数据已经严格按采集时间升序排列、无缺行乱序的场景,不需要解析时间字段,运行效率最高。核心逻辑是每1440行归为同一组,按顺序生成ID1、ID2……序列。

  • R语言实现(匹配你给出的数据集格式):
# 加载dplyr包,若未安装可先运行 install.packages("dplyr")
library(dplyr)
df <- df %>%
  mutate(day_id = paste0("ID", ceiling(row_number() / 1440)))
  • Python pandas实现:
import pandas as pd
import numpy as np
# 按行位置计算分组,不受原索引值影响
df['day_id'] = "ID" + np.ceil(np.arange(1, len(df)+1) / 1440).astype(int).astype(str)

方案2:基于x1.time时间字段生成ID(容错性更高)

如果数据可能存在缺分钟记录、行顺序错乱的情况,按行号分组会出现偏差,推荐用时间字段做分组判断:每当检测到时间为00:00:00时,视为新的一天开始,分组计数加1即可。

  • R语言实现:
df <- df %>%
  mutate(
    day_count = cumsum(x1.time == "00:00:00"),
    day_id = paste0("ID", day_count)
  )
  • Python pandas实现:
df['day_count'] = (df['x1.time'] == "00:00:00").cumsum()
df['day_id'] = "ID" + df['day_count'].astype(str)

提示:如果x1.time是时间类型而非字符串,只需要把判断条件替换为「提取时分秒部分是否为0点」即可,核心分组逻辑不变。你也可以同时运行两种方案,对比生成的ID是否完全一致,以此校验数据是否存在缺行、乱序问题。

简单校验方法

生成ID后建议做两步快速校验,避免分组错误:

  • 统计每个day_id对应的记录数,无数据缺失的情况下每个ID应该对应1440条记录,有缺失时记录数会小于1440
  • 抽查每个ID分组下的第一条记录时间是否为00:00:00,最后一条记录时间是否接近23:59:00

内容的提问来源于stack exchange,提问作者Data miner123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:36:25