R dplyr中行之间的时差,不同单位

use*_*890 4 datetime r difference dplyr

这是我的例子。我正在读取以下文件:sample_data

library(dplyr)

txt <- c('"",  "MDN",                  "Cl_Date"',
          '"1",  "A",  "2017-04-15 15:10:42.510"',
          '"2",  "A",  "2017-04-01 14:47:23.210"',
          '"3",  "A",  "2017-04-01 14:49:54.063"',
          '"4",  "B",  "2017-04-30 13:25:00.000"',
          '"5",  "B",  "2017-04-03 17:53:13.217"',
          '"6",  "B",  "2017-04-15 15:17:43.780"')

ts <- read.csv(text = txt, as.is = TRUE)
ts$Cl_Date <- as.POSIXct(ts$Cl_Date)
ts <- ts %>% group_by(MDN) %>% arrange(Cl_Date) %>%
  mutate(time_diff = c(0,diff(Cl_Date)))
ts <-ts[order(ts$MDN, ts$Cl_Date),]
Run Code Online (Sandbox Code Playgroud)

结果我有

MDN Cl_Date         time_diff
A   4/1/2017 14:47  0
A   4/1/2017 14:49  2.514216665
A   4/15/2017 15:10 20180.80745
B   4/3/2017 17:53  0
B   4/15/2017 15:17 11.89202041
B   4/30/2017 13:25 14.92171551
Run Code Online (Sandbox Code Playgroud)

因此,我按MDN列分组并计算Cl_Date列之间的差异。如您所见,有时以分钟为单位(A组)和有时以天(B组)不同。

为什么不同单位的时差如何校正?

PS我无法通过手动data.frame创建来重现相同的示例,因此我不得不从文件中读取。

UPDATE 1 diff(ts$Cl_Date)似乎是一致的,一切都在几分钟之内。里面有东西破裂dplyr吗?

更新2

ts <- ts %>% group_by(MDN) %>% arrange(Cl_Date) %>%
  mutate(time_diff_2 = Cl_Date-lag(Cl_Date))
Run Code Online (Sandbox Code Playgroud)

产生相同的结果。

tro*_*roh 6

ts <- ts %>% group_by(MDN) %>% arrange(Cl_Date) %>%
  mutate(time_diff_2 = as.numeric(Cl_Date-lag(Cl_Date), units = 'mins'))
Run Code Online (Sandbox Code Playgroud)

将时差转换为数值。您可以使用units参数使返回值保持一致。