繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM