r - 有没有办法在单个日期时间列中查找时差,按 ID 分组?
问题描述
我有以下数据集:
ID DATE
A 12/18/2019 1:26:07 AM
A 12/18/2019 1:26:30 AM
A 12/18/2019 1:26:31 AM
A 12/18/2019 1:26:32 AM
A 12/18/2019 1:26:33 AM
A 12/18/2019 1:26:34 AM
A 12/18/2019 1:26:34 AM
B 12/18/2019 1:26:37 AM
B 12/18/2019 1:26:38 AM
期望的结果:
Duration of A 27 secs
Duration of B 1 secs
我希望准确地按 ID 分组并准确地找到持续时间。我尝试将日期时间拆分为开始时间和结束时间,但这并没有产生正确的结果。我不确定是否应该创建一个循环?
到目前为止,我已经输入了这个命令,但没有得到正确的结果:
diff<-data %>%
mutate (Date = as.POSIXct(Date, format = "%m/%d/%Y %I:%M:%S %p")) %>%
group_by(ID) %>%
summarise(timediff = difftime(first(DATE), last(DATE))
任何帮助是极大的赞赏。我会继续研究这个。谢谢你。
解决方案
为了difftime
工作,您需要以相反的顺序进行参数。
library(dplyr)
data %>%
mutate(DATE = lubridate::mdy_hms(DATE)) %>%
group_by(ID) %>%
summarise(timediff = difftime(last(DATE), first(DATE)))
# ID timediff
# <fct> <drtn>
#1 A 27 secs
#2 B 1 secs
这也可以在基础 R 中完成:
data$DATE <- as.POSIXct(data$DATE, format = "%m/%d/%Y %I:%M:%S %p")
aggregate(DATE~ID, data, function(x) difftime(x[length(x)], x[1L]))
数据
data <- structure(list(ID = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L,
2L), .Label = c("A", "B"), class = "factor"), DATE = structure(c(1L,
2L, 3L, 4L, 5L, 6L, 6L, 7L, 8L), .Label = c("12/18/2019 1:26:07 AM",
"12/18/2019 1:26:30 AM", "12/18/2019 1:26:31 AM", "12/18/2019 1:26:32 AM",
"12/18/2019 1:26:33 AM", "12/18/2019 1:26:34 AM", "12/18/2019 1:26:37 AM",
"12/18/2019 1:26:38 AM"), class = "factor")), class = "data.frame",
row.names = c(NA,-9L))
推荐阅读
- laravel-8 - 如果失败则跳到下一个 http 请求(轮询)
- mongodb - 保存在 Controller 中时未调用 GORM 事件(beforeInsert)
- python - 如何使用 tkinter 和 opencv 在不冻结的情况下拍照?
- html - 标签按钮跳过一直是一个输入 - Angular 11
- arrays - Django postgresql 查询在 html 表中返回一个数组值
- javascript - 由于 javascript 错误,请求失败,状态为 500:javascript 错误:无法读取未定义的属性“dispatchEvent”
- reactjs - 在使用 redux-thunk 和 useSelector 填充表单值之前等待数据完全加载
- django - Django models.CharField max_length 不起作用
- javafx - 使用 JavaFX 的脉动不透明度效果
- python - Pytorch 对输入而不是输出求和雅可比