使用R计算纵向数据集的导数(即基于另一个变量的变化的一个变量的变化)

时间:2013-03-15 20:18:54

标签: r

我正在处理包含时间序列数据的大型数据集(约100万个障碍物)。换句话说,我的数据集包括每天对唯一标识符(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的导数。换句话说,我想计算每个var在第1天和第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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

的向量