我正在尝试创建一个变量,该变量用ID从第一行的日期中减去前一行的日期,但是在另一个变量等于1时重新开始。
data <- data.frame("ID" = c(1,1,1,1,1,1,1,1,2,2,2,2,2,2), "Date" = c("2018-08-07","2018-08-08","2018-08-09","2018-08-09","2018-08-10","2018-08-11","2018-08-11","2018-08-12","2018-08-04","2018-08-07","2018-08-07","2018-08-08","2018-08-09","2018-08-10"),"DRSG" = c(1,0,0,0,1,0,0,0,1,0,0,1,0,0))
ID Date DRSG
1 2018-08-07 1
1 2018-08-08 0
1 2018-08-09 0
1 2018-08-09 0
1 2018-08-10 1
1 2018-08-11 0
1 2018-08-11 0
1 2018-08-12 0
2 2018-08-04 1
2 2018-08-07 0
2 2018-08-07 0
2 2018-08-08 1
2 2018-08-09 0
2 2018-08-10 0
我希望它看起来像这样:
ID Date DRSG days
1 2018-08-07 1 0
1 2018-08-08 0 1
1 2018-08-09 0 2
1 2018-08-09 0 2
1 2018-08-10 1 0
1 2018-08-11 0 1
1 2018-08-11 0 1
1 2018-08-12 0 2
2 2018-08-04 1 0
2 2018-08-07 0 3
2 2018-08-07 0 3
2 2018-08-08 1 0
2 2018-08-09 0 1
2 2018-08-10 0 2
非常感谢您的帮助!
答案 0 :(得分:1)
首先在由DRSG
分组的原始ID
列上创建累积总和。然后,我们可以将 this 新列与原始ID
一起用作我们的组。从那里,我们利用dplyr::first
进行减法。
library(tidyverse)
data %>%
mutate(Date = as.Date(Date)) %>%
group_by(ID) %>%
mutate(increment_DRSG = cumsum(DRSG)) %>%
group_by(ID, increment_DRSG) %>%
mutate(days = Date - first(Date))