R中的多个条件累积和

时间:2018-03-19 05:58:06

标签: r dplyr cumsum

这是我的数据框,如下所示

rd <- data.frame(
    Customer = rep("A",15),                 
    date_num = c(3,3,9,11,14,14,15,16,17,20,21,27,28,29,31),                  
    exp_cumsum_col = c(1,1,2,3,4,4,4,4,4,5,5,6,6,6,7))

我正在尝试获取第3列(exp_cumsum_col),但尝试多次后无法获得正确的值。这是我使用的代码:

rd<-as.data.frame(rd %>%
    group_by(customer) %>%                
    mutate(exp_cumsum_col = cumsum(row_number(ifelse(date_num[i]==date_num[i+1],1)))))

如果我的date_num是连续的,那么我将整个系列视为一个数字,如果我的date_num中有任何中断,那么我将exp_cumsum_col增加1 ..... exp_cumsum_col将从1开始。

1 个答案:

答案 0 :(得分:2)

我们可以取相邻元素的差异,检查它是否大于1并得到cumsum

rd %>% 
   group_by(Customer) %>%
   mutate(newexp_col = cumsum(c(TRUE, diff(date_num) > 1)))
#    Customer date_num exp_cumsum_col newexp_col
#1         A        3              1          1
#2         A        3              1          1
#3         A        9              2          2
#4         A       11              3          3
#5         A       14              4          4
#6         A       14              4          4
#7         A       15              4          4
#8         A       16              4          4
#9         A       17              4          4
#10        A       20              5          5
#11        A       21              5          5
#12        A       27              6          6
#13        A       28              6          6
#14        A       29              6          6
#15        A       31              7          7