我正在处理包含时间序列数据的大型数据集(约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}}之类的东西。任何帮助表示赞赏!
答案 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