我有以下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
你能建议吗?
答案 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
你的计算似乎有些偏差。此外,这只适用于两年的数据,它需要概括为您有多年,并且您想要滚动比较,但这将让您开始。