如何在R中生成不规则时间序列上的简单滑动窗口特征



如果我有一些多元不规则时间序列,比如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

我可以写一些代码,将上述数据简单地格式化为一个数据帧,其中每(用户,天)一行,用于所有天(直到用户第一次购买的那一天),并使用以下列:

  • #项目i在过去7天内的点击量
  • #在7到31天前点击项目i
  • #过去的总点击量
  • 与项目j相同
  • 下载f,g也是如此
  • 是否在接下来的7天内进行购买

然而,我很好奇是否有简单、优雅、而且速度不慢的方法可以使用各种时间序列操作包来实现这一点。我四处看了看动物园和xts的东西,但没有发现任何有希望的东西。

您可以表示每种类型的事件(例如,"用户A单击项目i")作为每次出现值为1的时间序列x。你感兴趣的数量可以从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

最新更新