#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. Огромное спасибо. Ты действительно заставил это казаться очень легким. Впервые узнаю о лаге и кумсуме. Ценю всю вашу помощь