【发布时间】:2017-11-06 17:45:57
【问题描述】:
这是我的例子。我正在阅读以下文件: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),]
结果我有
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
所以我按 MDN 列分组并计算 Cl_Date 列之间的差异。如您所见,有时会以分钟为单位(A 组),有时以天为单位(B 组)。
为什么不同单位的时差以及如何修正?
附:我无法通过手动创建 data.frame 来重现相同的示例,因此我必须从文件中读取。
更新 1
diff(ts$Cl_Date) 似乎是一致的,一切都在几分钟内。 dplyr 内部有问题吗?
更新 2
ts <- ts %>% group_by(MDN) %>% arrange(Cl_Date) %>%
mutate(time_diff_2 = Cl_Date-lag(Cl_Date))
产生相同的结果。
【问题讨论】:
-
你为什么不使用像
df <- data.frame(grp = rep(c("a", "b", "c", "d"), each = 3), time = as.POSIXct("2017-06-05 12:00:00") + c(c(0, 1, 11), c(0, 1, 11) * 60, c(0, 1, 11) * 60 * 60, c(0, 1, 11) * 60 * 60 * 24))这样易于重现的例子 -
@Henrik 同意,谢谢!现在,这是一个错误吗?我该如何报告
dplyr的错误? -
这不是
dplyr中的错误,而是difftime的工作原理。我认为帮助文本的相关部分是“如果units = "auto",选择了一组合适的单位,尽可能大的 [...],其中所有绝对差异都大于一个。 " -
@Henrik,我如何为
diff函数提供单位? -
@Henrik 另外
diff(ts$Cl_Date)似乎很好,没有有趣的单位选择
标签: r datetime dplyr difference