r - R groupby函数计算时间差
问题描述
我不确定如何找到通过相同 ID 计算时间组之间差异的最佳方法。数据集如下:
ID:{1,1,2,2}
time:{13:44:07,13:44:09,13:44:34,13:45:44}
我想产生像L这样的输出
ID:{1,2}
timestamp:{2s,70s}
我已经将我的时间格式更改为 POSIXct,当我尝试使用如下代码时:
data%>%
group_by(ID)%>%
mutate(timestamp=difftime(time,lag(time)))
它显示了错误
Column `time` is a date/time and must be stored as POSIXct, not POSIXlt
解决方案
我们可以在使用difftime
转换为日期时间后使用as.POSIXct
(根据 OP 的帖子,可以用来strptime
将其转换POSIXlt
为不兼容的类tidyverse
)
library(dplyr)
data %>%
mutate(timeN = as.POSIXct(time, format = '%H:%M:%S')) %>%
group_by(ID) %>%
summarise(timediff = difftime(first(timeN), last(timeN), unit = 'sec'))
# A tibble: 2 x 2
# ID timediff
# <dbl> <time>
#1 1 -2
#2 2 -70
数据
data <- structure(list(ID = c(1, 1, 2, 2), time = c("13:44:07", "13:44:09",
"13:44:34", "13:45:44")), .Names = c("ID", "time"), row.names = c(NA,
-4L), class = "data.frame")
推荐阅读
- wordpress - 当用户在 WooCommerce 中免税时,如何以编程方式获取税额?
- office-js - ScriptLab 数据透视表示例不再起作用
- jquery - 基于类别选择栏呈现字段
- vue.js - Vuetify 日期选择器 - 如何设置对话框使用的初始日期
- python - 在 OSmnx 中将街道划分为更小的部分
- firebase - Firebase 存储安全规则 - 对象的属性大小未定义
- python - 如果我调用starmap 两次或更多次会有问题吗?
- laravel - Laravel 迁移遇到问题
- javascript - 将 JSON 数据从 JavaScript 发送到 Servlet
- python - python比较两个excel文件并删除重复数据