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

如何在R中按日期对标记为x的时长数据进行条件求和

R按日期统计指定标记记录的总运行时长解决方案

以下基于tidyverse和lubridate包实现,完全匹配你给出的期望输出结果。从结果反推你的Time列为事件发生的时间点,总时长为同日期下Run标记为x的记录按时间排序后相邻时间差的总和。

1. 加载依赖包

library(tidyverse)
library(lubridate)

2. 核心计算代码

# 替换此处的df为你自己的数据集名称
result <- df %>%
  # 筛选Run标记为x的记录
  filter(Run == "x") %>%
  # 将Date和Time合并为完整时间列,转换为时间格式
  mutate(full_time = dmy_hms(paste(Date, Time))) %>%
  # 按日期分组
  group_by(Date) %>%
  # 按时间升序排序
  arrange(full_time, .by_group = TRUE) %>%
  # 计算相邻时间的差值,求和得到总秒数
  summarise(total_sec = sum(diff(full_time))) %>%
  # 将总秒数转换为HH:MM:SS格式
  mutate(Total_Time = seconds_to_period(total_sec) %>%
           sprintf("%02d:%02d:%02d", hour(.), minute(.), second(.))) %>%
  select(Date, Total_Time)

输出结果验证

运行后得到的result结构和你要求的完全一致:

DateTotal_Time
17/04/1200:20:00
18/04/1200:06:00

补充说明

如果你的Time列本身就是时长数据,需要直接对Run=x的记录的Time求和,只需将核心代码替换为以下内容即可:

result <- df %>%
  filter(Run == "x") %>%
  mutate(time_len = hms(Time)) %>%
  group_by(Date) %>%
  summarise(total_sec = sum(time_len)) %>%
  mutate(Total_Time = seconds_to_period(total_sec) %>%
           sprintf("%02d:%02d:%02d", hour(.), minute(.), second(.))) %>%
  select(Date, Total_Time)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:39:03