我有一张列有客户姓名、付款月份和支出金额的表格,如下所示:
c_name p_month spend
ABC 201401 100
ABC 201402 150
ABC 201403 230
DEF 201401 110
DEF 201402 190
DEF 201403 300我想计算每个客户的月变化(mom_change)和月对月百分比变化(mom_per_change)。预期的产出将是-
c_name p_month spend mom_change mom_per_change
ABC 201401 100 Blank Blank
ABC 201402 150 50 0.5
ABC 201403 230 80 0.533
DEF 201401 110 Blank Blank
DEF 201402 190 80 0.727
DEF 201403 300 110 0.578我尝试使用diff分别计算每个客户端的更改。问题是,大约有10000个客户端,使用一个循环计算它需要很长时间。任何帮助都是非常感谢的。谢谢。
发布于 2016-06-27 13:50:25
下面是一个使用data.table的解决方案,其中blank被NAs替换:
library(data.table)
setDT(df)[, `:=` (mom_change = c(NA, diff(spend)),
mom_per_change = round(c(NA, diff(spend))/shift(spend), 3)), .(c_name)]
df
c_name p_month spend mom_change mom_per_change
1: ABC 201401 100 NA NA
2: ABC 201402 150 50 0.500
3: ABC 201403 230 80 0.533
4: DEF 201401 110 NA NA
5: DEF 201402 190 80 0.727
6: DEF 201403 300 110 0.579https://stackoverflow.com/questions/38055475
复制相似问题