2

我正在处理一个包含时间序列数据的大型数据集(约 100 万个 obs)。换句话说,我的数据集id每天都包含对唯一标识符 ( ) 的多次观察(为了提供一个简单的示例,它只是一个整数值)。例如,我的数据可能如下所示:

id    var    day
1     49     1
1     51     2
1     53     3
1     50     4
2     45     1
2     46     2
2     45     3
2     44     4

现在,我想计算var连续几天之间的导数。换句话说,我想计算每个var1 和 2 天、2 天和 3 天等之间的变化id。因此,生成的数据集将如下所示:

id    var    day   deriv
1     49     1     NA
1     51     2     2
1     53     3     2
1     50     4     -3
2     45     1     NA
2     46     2     1
2     45     3     -1
2     44     4     -1

我怀疑有一些非常简单的解决方案使用melt我不知道的东西。任何帮助表示赞赏!

4

2 回答 2

4

尝试:

> dfrm$deriv <- ave(dfrm$var, dfrm$id, FUN=function(v) c(NA, diff(v)) )
> dfrm
  id var day deriv
1  1  49   1    NA
2  1  51   2     2
3  1  53   3     2
4  1  50   4    -3
5  2  45   1    NA
6  2  46   2     1
7  2  45   3    -1
8  2  44   4    -1
于 2013-03-15T20:51:34.080 回答
0

如果d是矩阵并且day变量是有序的,试试这个:

do.call("c",lapply(unique(d[,1]),function(x){y <- d[d[,1]==x,];z <- y[2:nrow(y),]-y[1:(nrow(y)-1),]; c(NA,z[,2]/z[,3])}))

这会给你一个对应于的向量delta_var

于 2013-03-15T20:48:09.277 回答