【问题标题】:Cumulative Frequency based on row indices基于行索引的累积频率
【发布时间】:2021-03-24 17:46:17
【问题描述】:

我已经有一段时间遇到这个问题了。所以这是我正在使用的示例数据

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] = count[1:5]、cumulative_index[2]=count[2:5]、cumulative_index[3]=count[3:5] 等等。我知道这可能很简单,但我无法真正解决这个问题。感谢所有帮助

【问题讨论】:

  • 不确定您要计算什么,您能进一步解释一下吗?
  • 对不起,我对stackoverflow不太熟悉,但基本上,c3[1] =33 是所有 c2 = 33 的总和,然后 c3[2] 是 c2[2:5] = 的总和27 等等。

标签: r dplyr


【解决方案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

也可以写成dplyrdata.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))

【讨论】:

  • 非常感谢。你真的让它看起来很容易。第一次了解滞后和累积。感谢所有帮助
猜你喜欢
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
相关资源
最近更新 更多