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

如何在R中基于单列时间戳计算每个ID的首末记录时间差

R tidyverse实现方案

实现步骤

  1. 加载所需依赖包
  2. 将timestamp列转换为R可识别的日期时间格式
  3. 按ID分组后统计每个ID的记录数、最大最小时间
  4. 按规则计算时间差,仅出现1次的ID返回NA

完整代码

# 加载依赖,如未安装可先执行 install.packages("tidyverse")
library(tidyverse)
# 若ymd_hms函数报错,额外加载lubridate: library(lubridate)

# 示例数据,实际使用时替换为你的数据读取代码,比如 df <- read_csv("你的数据文件路径")
df <- tribble(
  ~ID, ~timestamp,
  "001", "2021-06-04 09:45:25",
  "001", "2021-06-04 09:46:25",
  "001", "2021-06-04 09:46:35",
  "002", "2021-06-04 05:45:25",
  "002", "2021-06-04 09:45:25",
  "004", "2021-06-04 09:15:12",
  "003", "2021-06-04 09:45:25",
  "004", "2021-06-06 09:45:25",
  "004", "2021-06-04 09:45:25"
)

# 核心处理逻辑
result <- df %>%
  mutate(timestamp = ymd_hms(timestamp)) %>%
  group_by(ID) %>%
  summarise(
    time_diff = ifelse(
      n() < 2, 
      NA, 
      max(timestamp) - min(timestamp)
    )
  )

# 查看输出结果
print(result)

输出说明

执行后输出结果符合要求,默认时间差单位会自动适配(秒/分钟/小时/天),如需固定单位可修改time_diff的计算逻辑,比如固定按小时输出:

time_diff = ifelse(n() < 2, NA, as.difftime(max(timestamp) - min(timestamp), units = "hours"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:15:04