R时间序列周期减去?

时间:2013-08-14 09:17:18

标签: r

3周前有一个用户事件的样本数据:

> subret
          uid       event_name       date count
2       10225            _e_io 2013-07-23     2
3       10225            _e_io 2013-07-24     3
4       10225            _e_io 2013-07-25     7
5       10225            _e_io 2013-07-26     6
6       10225            _e_io 2013-07-27    11
7       10225            _e_io 2013-07-28     4
8       10225            _e_io 2013-07-29     4
9       10225            _e_io 2013-07-30     2
10      10225            _e_io 2013-07-31     3
11      10225            _e_io 2013-08-01     1
12      10225            _e_io 2013-08-02     5
13      10225            _e_io 2013-08-03     2
14      10225            _e_io 2013-08-04     9
15      10225            _e_io 2013-08-05    13
16      10225            _e_io 2013-08-06     4
17      10225            _e_io 2013-08-07    14
18      10225            _e_io 2013-08-08    15
19      10225            _e_io 2013-08-09    11
20      10225            _e_io 2013-08-10     7
21      10225            _e_io 2013-08-11     2
22      10225 _e_renderer-load 2013-08-06     3
23      10225       _e_unknown 2013-07-29     1
24      10225       _e_unknown 2013-07-31     1
25      10225       _e_unknown 2013-08-01     1
26      10225       _e_unknown 2013-08-02     1
27      10225       _e_unknown 2013-08-06     4
28      10225       _e_unknown 2013-08-08     7
29      10225       _e_unknown 2013-08-10     3

我不知道如何获得每周减去事件的价值。一个接一个的事件提供丢失的日期计数很难操作。 R支持将值减去一致的密钥匹配(如merge)吗?

这意味着:

> ta <- (subret[subret$event_name == "_e_io" & subret$date <= as.Date("2013-07-29"), ])
> tb <- (subret[subret$event_name == "_e_io" & subret$date > as.Date("2013-07-29") & subret$date <= as.Date("2013-08-05"), ])
> (ta$count - tb$count / ta$count)
[1]  1.000000  2.000000  6.857143  5.166667 10.818182  1.750000  0.750000

我可以在一周内每天获得提升速度。

更新

对不起操作优先级。每周变化的速度应该是:

> ((ta$count - tb$count) / ta$count)
[1]  0.0000000  0.0000000  0.8571429  0.1666667  0.8181818 -1.2500000 -2.2500000

_e_io可以确定一周的日期是完整的,但对于其他人而言,一周的日期并不完整。 这是真的我需要先填充日期对齐吗? (使用merge?)

1 个答案:

答案 0 :(得分:0)

您的问题没有明确定义。但我猜你试图按事件和按周拆分数据。然后,对于每个事件,尝试计算由以下定义的计数返回值:

Count_week[i]- count_week[i+1]/count_week[i]

您可以使用by按事件处理,然后每周按时间分割您的时间序列(困难部分)。

by(subret,subret$event_name,function(x){
  nn <- nrow(x)
  x.week <- split(x$count,cut(seq(nn),
                              c(seq(0,nn,7),max(nn))))
  ll <- length(x.week)
  res <- 
  if(ll >1)
    lapply(seq(ll-1),function(y){
      x.week[[y]]-x.week[[y+1]]/x.week[[y]]
    })
  else NA
})

[1]]
[1]  1.000000  2.000000  6.857143  5.166667 10.818182  1.750000  0.750000

[[2]]
[1]   0.000000  -1.666667 -14.000000   2.800000  -1.500000   8.777778  12.692308

------------------------------------------------------------------------------------------ 
subret$event_name: _e_renderer-load
[1] NA
------------------------------------------------------------------------------------------ 
subret$event_name: _e_unknown
[1] NA
Warning message:
In x.week[[y + 1]]/x.week[[y]] :
  longer object length is not a multiple of shorter object length