我有一个带有组和时间ID的数据框。现在,我要创建一个新的计数变量,称为X2
,其条件是每个组中的X1
的先前值。
假设我具有以下数据框,变量group
,time
,X1
,并想要创建X2
。 X2
的值应该是一个计数变量,指示自X1
最后一次等于给定组中的1以来的周期数(即行数)。如果X1
的所有先前值均为0,则X2
应该丢失。
group time X1 X2
1 1 1 0 NA
2 1 2 0 NA
3 1 3 1 NA
4 1 4 0 0
5 1 5 1 1
6 2 1 0 NA
7 2 2 1 NA
8 2 3 1 0
9 2 4 1 0
10 2 5 0 0
11 3 1 0 NA
12 3 2 0 NA
13 3 3 0 NA
14 3 4 1 NA
15 3 5 0 0
16 4 1 1 NA
17 4 2 0 0
18 4 3 0 1
19 4 4 0 2
20 4 5 1 3
data_test <- data.frame(
group = rep(1:4, each = 5),
time = rep(1:5, n = 4),
X1 = c(0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1),
X2 = c(NA, NA, NA, 0, 1, NA, NA, 0, 0, 0, NA, NA, NA, NA, 0, NA, 0, 1, 2, 3))
我可以通过在cumsum()==0
中使用if命令来轻松创建NA。但是,我不知道如何处理其他部分,即创建计数。
任何帮助将不胜感激-如果可以的话,请使用dplyr
。
非常感谢。
使用%>%
程序包中的管道(mutate
),group_by
,lag
和dplyr
功能>>
library(dplyr)
data_test %>%
group_by(group) %>%
mutate(X2 = ifelse(lag(X1) == 1, 0, lag(X2) + 1))