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 lag
和 4 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 创建
我有一个包含结果变量的数据集 - 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 lag
和 4 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 创建