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

R语言按分组替换指定时间范围内数据列值的实现问题

错误原因

原代码未将主数据集和存储分组时间边界的df.test按Group关联,直接调用df.test$MinTime/df.test$MaxTime会取出所有组的边界值,分组运算时无法匹配当前组对应的时间范围,最终判断逻辑失效。

推荐解决方案(left_join 关联法,可读性高、适配大数据量)

library(dplyr)

df.test.replace <- df %>%
  # 按分组关联每个组对应的almost peak时间区间
  left_join(df.test, by = "Group") %>%
  # 处于区间内的Status统一替换为peak
  mutate(Status = if_else(DateTime >= MinTime & DateTime <= MaxTime, "peak", Status)) %>%
  # 移除临时关联的边界字段,和预期输出格式对齐
  select(-MinTime, -MaxTime)

可选方案(分组内直接匹配,无需新增字段)

如果不想做表关联,也可以在分组运算时匹配当前组的边界值:

df.test.replace <- df %>%
  group_by(Group) %>%
  mutate(Status = replace(Status, 
                          DateTime >= df.test$MinTime[df.test$Group == cur_group()$Group] & 
                          DateTime <= df.test$MaxTime[df.test$Group == cur_group()$Group], 
                          "peak")) %>%
  ungroup()

两种方案运行后得到的结果都和你给出的预期输出完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:06:03