通过R中的ID从第一行减去前几行

时间:2019-02-26 15:44:42

标签: r

我正在尝试创建一个变量,该变量用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

非常感谢您的帮助!

1 个答案:

答案 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))