【问题标题】:Multiple Conditional Cumulative Sum in RR中的多个条件累积和
【发布时间】:2018-03-19 05:58:06
【问题描述】:

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

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 ..... @ 987654328@ 将从 1 开始。

【问题讨论】:

标签: r dplyr cumsum


【解决方案1】:

我们可以取相邻元素的差异,检查是否大于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

【讨论】:

  • 如果我将它用于多个客户,那么它不会提供完整的答案....您可以为客户分组提供一些输入吗?
  • @YogeshKumar 在变异之前你只需要group_by(Customer) .. 更新
  • 如果您不需要群组,请使用ungroup()。 (过滤和变异操作在未分组的数据帧上更快,至少在 dplyr 0.7.4 上)
猜你喜欢
  • 2013-05-20
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多