纵向数据切换次数

时间:2018-03-26 19:21:37

标签: r

所以,我有一个时间序列,每个ID有很多观察结果。我在每个时间点测量1/0变量。我想知道一个人从1切换到0或0到1的次数。

每个ID中随机丢失数据。

id=c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4)
indicator=c(1,0,0,0,1,1,NA,1,1,0,1,0,NA,1,1,0)
timepoint=c(2003,2004,2005,2006)
td = data.frame(id,timepoint,indicator)

我需要代码来返回这些数据中每个人的切换次数。

1 个答案:

答案 0 :(得分:0)

要计算数字从0切换到1或1到0,您需要做的就是shifting向量并比较两个移位版本。并且它们通过id应用此函数,假设您的数据已按时间顺序排序。

library(data.table)
count.switch=function(x) sum(tail(x,-1)!= head(x,-1),na.rm=T)
td[,count.switch(indicator),keyby=.(id)]

使用此方法,您可以指定要计算的开关

count.switch.01=function(x) sum(tail(x,-1) == 0 & head(x,-1) ==1 ,na.rm=T)

您还可以使用(==0 & ==1) | (==1 & ==0)

计算两者

另一个技巧是计算移位的向量加1元素。它们仅在一个元素为0而另一个元素为1时才会执行。

count.switch=function(x) sum(tail(x,-1) + head(x,-1) == 1,na.rm=T)