我试图找出如何在事件作为数据框中的日期列存储的连续事件之间获得时间。
sampledf=structure(list(cust = c(1L, 1L, 1L, 1L), date = structure(c(9862,
9879, 10075, 10207), class = "Date")), .Names = c("cust", "date"
), row.names = c(NA, -4L), class = "data.frame")
我可以用
得到答案as.numeric(rev(rev(difftime(c(sampledf$date[-1],0),sampledf$date))[-1]))
# [1] 17 196 132
但它真的很难看。除其他外,我只知道如何排除向量中的第一项,但不知道最后一项,所以我必须两次rev()才能删除最后一个值。
有更好的方法吗?
顺便说一句,我将使用ddply为每个cust id执行更大的数据集,因此解决方案需要使用ddply。
library(plyr)
ddply(sampledf,
c("cust"),
summarize,
daysBetween = as.numeric(rev(rev(difftime(c(date[-1],0),date))[-1]))
)
谢谢!
答案 0 :(得分:5)
你在找这个吗?
as.numeric(diff(sampledf$date))
# [1] 17 196 132
要删除最后一个元素,请使用head
:
head(as.numeric(diff(sampledf$date)), -1)
# [1] 17 196
require(plyr)
ddply(sampledf, .(cust), summarise, daysBetween = as.numeric(diff(date)))
# cust daysBetween
# 1 1 17
# 2 1 196
# 3 1 132
答案 1 :(得分:2)
您可以使用diff
。
as.numeric(diff(sampledf$date))
要离开最后一个元素,你可以这样做:
[-length(vec)] #where `vec` is your vector
在这种情况下,我认为你不需要留下任何东西,因为diff
已经是一个较短的元素:
test <- ddply(sampledf,
c("cust"),
summarize,
daysBetween = as.numeric(diff(sampledf$date)
))
test
# cust daysBetween
#1 1 17
#2 1 196
#3 1 132