Совокупная частота на основе индексов строк

#r #dplyr

Вопрос:

У меня уже некоторое время были проблемы с этой проблемой. Итак, вот пример данных, с которыми я работаю

 dt <- data.frame(purchase_freq =  c('1','2','3','4', '5'), count = c('6','2','5','9','11'))
 

и я хочу, чтобы результат был похож на этот

 dt <- data.frame(purchase_freq = c('1','2','3','4', '5'), count = c('6','2','5','9','11'), cumulative_index = ('33','27','25','20','11'))
 

Спасибо за помощь!

Правка: Извините, это было недостаточно ясно. В основном cumulative_index[1] = количество[1:5], cumulative_index[2]=количество[2:5], cumulative_index[3]=количество[3:5] и так далее. Я знаю, что это может быть достаточно просто, но я действительно не могу решить эту проблему. Ценю всю вашу помощь

Комментарии:

1. Не уверен, что вы пытаетесь вычислить, не могли бы вы объяснить подробнее ?

2. Извините, я не совсем знаком с stackoverflow, но в принципе, c3[1] =33-это сумма всех c2 = 33, затем c3[2] — это сумма c2[2:5] = 27 и так далее.

Ответ №1:

Вы можете вычесть сумму c2 стоимости из совокупной суммы c2 .

 transform(dt, c3 = sum(c2) - c(0, cumsum(c2[-nrow(dt)])))

#  c1 c2 c3
#1  1  6 33
#2  2  2 27
#3  3  5 25
#4  4  9 20
#5  5 11 11
 

Может быть записано в dplyr и data.table также :

 library(dplyr)
dt %>% mutate(c3 = sum(c2) - lag(cumsum(c2), default = 0))

library(data.table)
setDT(dt)[, c3 := sum(c2) - shift(cumsum(c2), fill = 0)]
 

данные

 dt <- data.frame(c1 = c(1,2,3,4,5), c2 = c(6,2,5,9,11))
 

Комментарии:

1. Огромное спасибо. Ты действительно заставил это казаться очень легким. Впервые узнаю о лаге и кумсуме. Ценю всю вашу помощь