R 是否有办法在单个datetime列(按ID分组)中查找时间差?
我有以下数据集:R 是否有办法在单个datetime列(按ID分组)中查找时间差?,r,time,dplyr,R,Time,Dplyr,我有以下数据集: 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
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))
diff%
突变(日期=as.POSIXct(日期,格式=“%m/%d/%Y%I:%m:%S%p”))%>%
分组依据(ID)%>%
总结(timediff=difftime(第一个(日期),最后一个(日期))
非常感谢您的帮助。
我将继续对此进行研究。
谢谢。要使
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
库(dplyr)
数据%>%
突变(日期=润滑::mdy_hms(日期))%>%
分组依据(ID)%>%
总结(timediff=difftime(最后一个(日期)、第一个(日期)))
#ID时间差
#
#1a 27秒
#2b1秒
这也可以在base 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$DATE请以dput
的形式提供数据。使用dput(头部(df,n))
帮助再现性。您好,谢谢。默认值是以秒为单位吗?还是我需要添加单位=secs@TanishaHudson我认为它会自动选择相关的单位。您可以指定units=“secs”
在difftime
中,如果您总是希望它们以秒为单位。
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))