[英]Calculating derivative (i.e. change in one variable based on change in another variable) of longitudinal dataset using 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
导数。 换句话说,我想计算每个id
在第1天和第2天,第2天和第3天等之间的var
变化。 结果数据集将如下所示:
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
惊人简单解决方案。 任何帮助表示赞赏!
尝试:
> 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
如果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
相对应的向量
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.