根据组中的先前值创建新的计数变量

问题描述 投票:0回答:1

我有一个带有组和时间ID的数据框。现在,我要创建一个新的计数变量,称为X2,其条件是每个组中的X1的先前值。

假设我具有以下数据框,变量grouptimeX1,并想要创建X2X2的值应该是一个计数变量,指示自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

非常感谢。

r dplyr count conditional-statements lag
1个回答
0
投票

使用%>%程序包中的管道(mutate),group_bylagdplyr功能>>

library(dplyr)
data_test %>%
  group_by(group) %>%
  mutate(X2 = ifelse(lag(X1) == 1, 0, lag(X2) + 1))
© www.soinside.com 2019 - 2024. All rights reserved.