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))