如果我有一些多变量不规则时间序列,例如zoo或xts对象:
> clicks
user item
2003-01-02 a i
2003-01-03 a i
2003-01-08 b i
2003-01-09 a j
2003-01-09 c j
2003-01-10 b j
> downloads
user file
2003-01-08 a f
2003-01-11 b g
2003-01-11 b f
> purchases
user
2003-01-10 a
2003-01-16 b
我可以编写一些代码,将上述数据的简单特征产生到一个数据框中,每天(用户,每天)一行(直到用户第一次购买的那一天),并使用以下列:
但是,我很好奇是否有使用各种时间序列操作包完成此操作的简单,优雅和非痛苦的方法。我环顾了动物园和xts的东西,但我没有找到任何有希望的东西。
答案 0 :(得分:0)
您可以代表每种类型的事件(例如,“用户A点击项目i”)
作为时间序列x
,每次出现时值为1。
您感兴趣的数量可以从cumsum(x)
计算出来
(截至今天的事件数量)及其翻译
(事件数量,直到过去或将来的k天)。
# Sample data
set.seed(0)
k <- 100
users <- LETTERS[1:4]
files <- letters[1:4]
items <- letters[24:26]
clicks <- data.frame(
time = Sys.time() + runif(k, 0, k * 24 * 3600),
user = sample( users, k, replace=TRUE ),
item = sample( items, k, replace=TRUE )
)
clicks <- unique(clicks)
对于单个时间序列:
x <- subset( clicks, user=="C" & item=="x" )
xts( rep(1,nrow(x)), x$time )
x <- xts( rep(1,nrow(x)), x$time )
y <- xts( coredata(x), index(x)+7*3600*24 )
z <- cbind(y, x)
z[ is.na(z) ] <- 0
cumsum(z[,2]) - cumsum(z[,1])
# cbind(x,z,cumsum(z[,2]) - cumsum(z[,1]))
对于整个数据集,您可以使用ddply
。