r 滞后和超前指标(按组)

r lag and lead indicator by group

我有一个包含结果变量的数据集 - owl 权重 [y] 和记录结果的年份时间 [t]。第三个变量是什么类型的饲料提供给婴儿 owls[w] 和第 4 列是哪一年引入新饲料的[a]。

  y       t      w       a
 -1.354   1994   Zi      2015
  2.146   1994   Zi      2015
  3.146   2001   Zi      2015
  2.646   2011   Zi      2015
 -2.354   2015   Zi      2015
 -0.854   2016   Zi      2015
 -3.854   2017   Zi      2015
 -2.354   2021   Zi      2015 
 -2.354   2001   Ca      2010 
  1.146   2002   Ca      2010 
 -2.354   2003   Ca      2010
 -0.854   2005   Ca      2010
 -6.354   2011   Ca      2010
  2.146   2019   Ca      2010

Step1 :我喜欢从索引 a 列创建一个 time to event variable 列,像这样 t-a=time to event variable

  y       t      w       a     TimeToEvent
 -1.354   1994   Zi      2015  -21
  2.146   1994   Zi      2015  -21
  3.146   2001   Zi      2015  -14
  2.646   2011   Zi      2015  -4
 -2.354   2015   Zi      2015   0
 -0.854   2016   Zi      2015   1
 -3.854   2017   Zi      2015   2
 -2.354   2021   Zi      2015   6
 -2.354   2001   Ca      2010  -9
  1.146   2002   Ca      2010  -8
 -2.354   2003   Ca      2010  -7
 -0.854   2005   Ca      2010  -5
  1.147   2010   Ca      2010   0
 -6.354   2011   Ca      2010   1
  2.146   2019   Ca      2010   9

Step2 :我喜欢创建 4 lag4 lead 变量,这样

  y       t      w       a     TimeToEvent  Lg4  Lg3  Lg2  Lg1  Index  Ld1  Ld2  Ld3  Ld4
 -1.354   1994   Zi      2015  -21          1    0    0    0    0      0    0    0    0  
  2.146   1998   Zi      2015  -17          1    0    0    0    0      0    0    0    0  
 -3.146   2001   Zi      2015  -14          1    0    0    0    0      0    0    0    0 
  2.646   2011   Zi      2015  -4           1    0    0    0    0      0    0    0    0 
  0.133   2013   Zi      2015  -2           0    0    1    0    0      0    0    0    0 
 -2.354   2015   Zi      2015   0           0    0    0    0    1      0    0    0    0 
 -0.854   2016   Zi      2015   1           0    0    0    0    0      1    0    0    0
 -3.854   2017   Zi      2015   2           0    0    0    0    0      0    1    0    0
 -2.354   2021   Zi      2015   6           0    0    0    0    0      0    0    0    1
 -2.354   2001   Ca      2010  -9           1    0    0    0    0      0    0    0    0 
  1.146   2002   Ca      2010  -8           1    0    0    0    0      0    0    0    0 
 -2.354   2003   Ca      2010  -7           1    0    0    0    0      0    0    0    0 
 -0.854   2005   Ca      2010  -5           1    0    0    0    0      0    0    0    0 
  1.147   2010   Ca      2010   0           0    0    0    0    1      0    0    0    0 
 -6.354   2011   Ca      2010   1           0    0    0    0    0      1    0    0    0
  2.146   2019   Ca      2010   9           0    0    0    0    0      0    0    0    1

如您所见,我只对跟踪指数年之前和指数年之后的 4 个时间段的超前和滞后感兴趣 [a 列]。

  y       t      w       a     TimeToEvent  Lg4  Lg3  Lg2  Lg1  Index  Ld1  Ld2  Ld3  Ld4
  .       .      .       .      .           .    .    .    .    .      .    .    .    .  
  .       .      .       .      .           .    .    .    .    .      .    .    .    . 
  2.646   2011   Zi      2015  -4           1    0    0    0    0      0    0    0    0 
  0.133   2013   Zi      2015  -2           0    0    1    0    0      0    0    0    0 
 -2.354   2015   Zi      2015   0           0    0    0    0    1      0    0    0    0 
 -0.854   2016   Zi      2015   1           0    0    0    0    0      1    0    0    0
 -3.854   2017   Zi      2015   2           0    0    0    0    0      0    1    0    0
  .       .      .       .      .           .    .    .    .    .      .    .    .    .  
  .       .      .       .      .           .    .    .    .    .      .    .    .    . 
  1.147   2010   Ca      2010   0           0    0    0    0    1      0    0    0    0 
 -6.354   2011   Ca      2010   1           0    0    0    0    0      1    0    0    0

在 4 个超前期或 4 个滞后期之外发生的任何观察值都分配 1,具体取决于它们是 t < a 还是 t > a,例如前三个观察值 time to event 是 -12、-17 和 - 14 因此这些观察值将在 Lg4 列(边界)中分配为 1 类似地,group(wa)=Ca 的前 4 个观察值是 -9,-8,-7,-5 因此它们在 Lg4 列中分配为 1

  y       t      w       a     TimeToEvent  Lg4  Lg3  Lg2  Lg1  Index  Ld1  Ld2  Ld3  Ld4
 -1.354   1994   Zi      2015  -21          1    0    0    0    0      0    0    0    0  
  2.146   1998   Zi      2015  -17          1    0    0    0    0      0    0    0    0  
 -3.146   2001   Zi      2015  -14          1    0    0    0    0      0    0    0    0 

 -2.354   2001   Ca      2010  -9           1    0    0    0    0      0    0    0    0 
  1.146   2002   Ca      2010  -8           1    0    0    0    0      0    0    0    0 
 -2.354   2003   Ca      2010  -7           1    0    0    0    0      0    0    0    0 
 -0.854   2005   Ca      2010  -5           1    0    0    0    0      0    0    0    0 

具有 time to event 外部铅的观察将在另一端分配 1(Ld4 列)

  y       t      w       a     TimeToEvent  Lg4  Lg3  Lg2  Lg1  Index  Ld1  Ld2  Ld3  Ld4
 -2.354   2021   Zi      2015   6           0    0    0    0    0      0    0    0    1
  2.146   2019   Ca      2010   9           0    0    0    0    0      0    0    0    1

最终预期数据集如上面第2步所示

  y       t      w       a     TimeToEvent  Lg4  Lg3  Lg2  Lg1  Index  Ld1  Ld2  Ld3  Ld4
 -1.354   1994   Zi      2015  -21          1    0    0    0    0      0    0    0    0  
  2.146   1998   Zi      2015  -17          1    0    0    0    0      0    0    0    0  
 -3.146   2001   Zi      2015  -14          1    0    0    0    0      0    0    0    0 
 
  2.646   2011   Zi      2015  -4           1    0    0    0    0      0    0    0    0 
  0.133   2013   Zi      2015  -2           0    0    1    0    0      0    0    0    0 
 -2.354   2015   Zi      2015   0           0    0    0    0    1      0    0    0    0 
 -0.854   2016   Zi      2015   1           0    0    0    0    0      1    0    0    0
 -3.854   2017   Zi      2015   2           0    0    0    0    0      0    1    0    0
 
 -2.354   2021   Zi      2015   6           0    0    0    0    0      0    0    0    1
 
 -2.354   2001   Ca      2010  -9           1    0    0    0    0      0    0    0    0 
  1.146   2002   Ca      2010  -8           1    0    0    0    0      0    0    0    0 
 -2.354   2003   Ca      2010  -7           1    0    0    0    0      0    0    0    0 
 -0.854   2005   Ca      2010  -5           1    0    0    0    0      0    0    0    0 
 
  1.147   2010   Ca      2010   0           0    0    0    0    1      0    0    0    0 
 -6.354   2011   Ca      2010   1           0    0    0    0    0      1    0    0    0
 
  2.146   2019   Ca      2010   9           0    0    0    0    0      0    0    0    1

非常感谢有关此的任何建议。谢谢。

看来您只是在测试参加活动的时间,所以一堆 ifelse 就可以了。

如果您想替换那里的缺失值,我建议您使用 dplyr::across()tidyr::replace_na() 应用于所有这些列。您也可以使用 dplyr::case_when() 而不是 ifelse().

此外,对于您以后的问题,请尝试以可粘贴代码的形式提供数据集,例如在我的回答中(或者使用 dput() 更好)。

代码如下:

library(tidyverse)
df=read.table(header=T, text="
y       t      w       a
-1.354   1994   Zi      2015
2.146   1994   Zi      2015
3.146   2001   Zi      2015
2.646   2011   Zi      2015
-2.354   2015   Zi      2015
-0.854   2016   Zi      2015
-3.854   2017   Zi      2015
-2.354   2021   Zi      2015 
-2.354   2001   Ca      2010 
1.146   2002   Ca      2010 
-2.354   2003   Ca      2010
-0.854   2005   Ca      NA
-6.354   2011   Ca      2010
2.146   2019   Ca      2010")

df %>% 
    mutate(
        tte=t-a, 
        Lg4=ifelse(tte<=-4, 1, 0), 
        Lg3=ifelse(tte==-3, 1, 0), 
        Lg2=ifelse(tte==-2, 1, 0), 
        Lg1=ifelse(tte==-1, 1, 0), 
        Index=ifelse(tte==0, 1, 0), 
        Ld1=ifelse(tte==1, 1, 0),
        Ld2=ifelse(tte==2, 1, 0), 
        Ld3=ifelse(tte==3, 1, 0), 
        Ld4=ifelse(tte>=4, 1, 0), 
        across(Lg4:Ld4, replace_na, replace=0)
    )
#>         y    t  w    a tte Lg4 Lg3 Lg2 Lg1 Index Ld1 Ld2 Ld3 Ld4
#> 1  -1.354 1994 Zi 2015 -21   1   0   0   0     0   0   0   0   0
#> 2   2.146 1994 Zi 2015 -21   1   0   0   0     0   0   0   0   0
#> 3   3.146 2001 Zi 2015 -14   1   0   0   0     0   0   0   0   0
#> 4   2.646 2011 Zi 2015  -4   1   0   0   0     0   0   0   0   0
#> 5  -2.354 2015 Zi 2015   0   0   0   0   0     1   0   0   0   0
#> 6  -0.854 2016 Zi 2015   1   0   0   0   0     0   1   0   0   0
#> 7  -3.854 2017 Zi 2015   2   0   0   0   0     0   0   1   0   0
#> 8  -2.354 2021 Zi 2015   6   0   0   0   0     0   0   0   0   1
#> 9  -2.354 2001 Ca 2010  -9   1   0   0   0     0   0   0   0   0
#> 10  1.146 2002 Ca 2010  -8   1   0   0   0     0   0   0   0   0
#> 11 -2.354 2003 Ca 2010  -7   1   0   0   0     0   0   0   0   0
#> 12 -0.854 2005 Ca   NA   0   0   0   0   0     0   0   0   0   0
#> 13 -6.354 2011 Ca 2010   1   0   0   0   0     0   1   0   0   0
#> 14  2.146 2019 Ca 2010   9   0   0   0   0     0   0   0   0   1

reprex package (v2.0.1)

于 2021-12-27 创建