【问题标题】:Is there a way to find the time difference within a single datetime column, grouped by ID?有没有办法在单个日期时间列中查找时差,按 ID 分组?
【发布时间】:2020-04-21 17:04:36
【问题描述】:

我有以下数据集:

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

非常感谢任何帮助。 我会继续研究这个。 谢谢。

【问题讨论】:

  • 请以dput 的形式提供数据。使用dput(head(df,n)) 来帮助重现性。

标签: r time dplyr


【解决方案1】:

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

【讨论】:

  • 您好,谢谢。默认以秒为单位?还是我需要添加单位 = secs
  • @TanishaHudson 我认为它会自动选择相关单位。如果您总是希望在几秒钟内得到它们,您可以在 difftime 中指定 units = "secs"
猜你喜欢
  • 2012-02-29
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多