我有一个随时间变化的 Dataframe ,并按组划分。有一个与用户状态相关的二进制字段。用户可以在一段时间内保持此状态,也可以退出。我希望创建一个特定于每个用户的计数器,该计数器在用户每次进入和重新进入状态期间时递增。状态周期开始之间的每个时间点都保持相同的值。
所需输出Status_Count
:
Date User_ID Status Status_Count
01/01/2022 1 0 0
01/02/2022 1 0 0
01/03/2022 1 1 1
01/04/2022 1 1 1
01/05/2022 1 1 1
01/06/2022 1 0 0
01/07/2022 1 0 0
01/08/2022 1 1 2
01/09/2022 1 1 2
01/10/2022 1 0 0
01/11/2022 1 0 0
01/12/2022 1 0 0
01/01/2022 2 0 0
01/02/2022 2 1 1
01/03/2022 2 1 1
01/04/2022 2 1 1
01/05/2022 2 0 0
01/06/2022 2 0 0
01/07/2022 2 1 2
01/08/2022 2 1 2
01/09/2022 2 0 0
01/10/2022 2 0 0
01/11/2022 2 1 3
01/12/2022 2 0 0
示例数据:
Date <- rep(seq(as.Date('2022-01-01'), as.Date('2022-12-01'), by = "month"), 2)
User_ID <- c(rep.int(1, 12), rep.int(2, 12))
Status<- c(0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0)
Status_Counter <- c(0, 0, 1, 1, 1, 0, 0, 2, 2, 0, 0, 0, 0, 1, 1, 1, 0, 0, 2, 2, 0, 0, 3, 0)
Example_Data <- data.frame(Date, User_ID, Status, Status_Counter)
我尝试编码这个:
library(dplyr)
Example_Data <- Example_Data %>%
group_by(User_ID) %>%
dplyr::mutate(Counter = case_when(
Event == 1 & (Status != lag(Status, 1) | is.na(lag(Status, 1))) ~ cumsum(Status),
Event == 1 ~ cumsum(Status),
TRUE ~ 0))
1条答案
按热度按时间wz3gfoph1#
结果