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

如何计算数据集中Auto-grooming行为的总持续时长?

计算数据集中指定行为的总持续时长

解决步骤:

  • 将时间列转换为可计算的时间类型:当前Time列是格式化后的字符串,需转回POSIXct类型才能进行时间差计算。
  • 生成下一个行为的时间列:用lead()函数获取每行的下一个时间值,作为当前行为的结束时间。
  • 计算单条行为的持续时长:通过下一个时间减去当前时间,得到每条行为的持续秒数。
  • 筛选目标行为并求和:过滤出"Auto-grooming"的记录,将对应时长相加得到总时长。

完整代码实现:

# 加载dplyr包(未安装先执行 install.packages("dplyr"))
library(dplyr)

# 原数据准备
hours <-  c("10:44:40", "10:45:00", "10:45:30", "10:45:38", "10:45:50")
horas_preparadas <- as.POSIXct(hours, format = "%H:%M:%S")
formatted_time <- format(horas_preparadas, format = "%H:%M:%S")

prueba <-  data.frame(
    Id = c(1, 1, 1, 1, 1),
    Obs = as.factor(c("Mike", "Mike", "Mike", "Mike", "Mike")),
    Behavior = c(
      "Auto-grooming",
      "Self-Scratch",
      "Grunt",
      "Auto-grooming",
      "Self-Scratch"
    ),
    Time = formatted_time
  )

# 处理时间计算
prueba_processed <- prueba %>%
  mutate(Time = as.POSIXct(Time, format = "%H:%M:%S")) %>%
  mutate(next_time = lead(Time)) %>%
  mutate(duration_sec = as.numeric(difftime(next_time, Time, units = "secs")))

# 计算Auto-grooming的总时长
total_duration <- prueba_processed %>%
  filter(Behavior == "Auto-grooming") %>%
  summarise(total_sec = sum(duration_sec, na.rm = TRUE))

print(total_duration)

结果说明:

运行代码后可得Auto-grooming的总持续时长为22秒:

  • 首次Auto-grooming从10:44:40到10:45:00,持续20秒
  • 第二次Auto-grooming从10:45:38到10:45:50,持续12秒
  • 两者相加总时长为22秒

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:22:49