如何将功能应用于QoQ数据

时间:2015-10-22 07:55:07

标签: r data.table

我有以下data.table:

library(data.table)
mydt <- data.table(DATE=c(201403,201406,201409,201412,201503,201506,201509), BALANCE = c(126,132,137,139,136,135,134), INCOME=c(288,298,303,303,299,297,292))

返回,

     DATE BALANCE INCOME
1: 201403     126    288
2: 201406     132    298
3: 201409     137    303
4: 201412     139    303
5: 201503     136    299
6: 201506     135    297
7: 201509     134    292

我想计算,例如,在2015年第三季度,该值将是(136-126)/(288 - 126)= 0.06。完成的结果如下:

     DATE BALANCE INCOME CHANGE
1: 201403     126    288     NA
2: 201406     132    298     NA
3: 201409     137    303     NA
4: 201412     139    303     NA
5: 201503     136    299  0.060
6: 201506     135    297  0.017
7: 201509     134    292 -0.016

你能建议吗?

1 个答案:

答案 0 :(得分:1)

一种可能的解决方案是在DATE的子字符串上运行这些计算(同时确保它是有序的)

mydt[order(DATE), 
     CHANGE := c(NA, round(diff(BALANCE)/(INCOME[1L] - BALANCE[1L]), 3L)), 
     by = substr(DATE, 5L, 6L)]
mydt
#      DATE BALANCE INCOME CHANGE
# 1: 201403     126    288     NA
# 2: 201406     132    298     NA
# 3: 201409     137    303     NA
# 4: 201412     139    303     NA
# 5: 201503     136    299  0.062
# 6: 201506     135    297  0.018
# 7: 201509     134    292 -0.018

你的计算似乎有些偏差。此外,这只适用于两年的数据,它需要概括为您有多年,并且您想要滚动比较,但这将让您开始。