こんにちは、次の例で
library(data.table)
library(lubridate)
set.seed(1234)
a = data.table(date=seq(ymd('2001-6-30'),ymd('2003-6-30'),by='weeks'),a=rnorm(105),b=rnorm(105),c=rnorm(105))
少し似たような出力が得られます
date a b c
1: 2001-06-30 -1.20706575 0.16698928 0.41805782
2: 2001-07-07 0.27742924 -0.89626463 -0.40023524
3: 2001-07-14 1.08444118 0.16818539 1.49349310
4: 2001-07-21 -2.34569770 0.35496826 -1.60708094
5: 2001-07-28 0.42912469 -0.05210512 -0.41575179
---
101: 2003-05-31 0.41452353 0.76046236 1.47171869
102: 2003-06-07 -0.47471847 1.84246363 0.44366490
103: 2003-06-14 0.06599349 1.11236284 -0.42172187
104: 2003-06-21 -0.50247778 0.03266396 -0.04000163
105: 2003-06-28 -0.82599859 -1.11444896 -0.49227997
そして、私はそれを累積することができます(たとえば、収益率の場合)
a[,(2:4):=lapply(.SD,function(x) cumprod(x/100+1)),.SDcols=2:4]
そして得る
date a b c
1: 2001-06-30 0.9879293 1.0016699 1.0041806
2: 2001-07-07 0.9906701 0.9926923 1.0001615
3: 2001-07-14 1.0014134 0.9943618 1.0150988
4: 2001-07-21 0.9779233 0.9978915 0.9987854
5: 2001-07-28 0.9821198 0.9973716 0.9946329
---
101: 2003-05-31 0.8540733 1.0838999 1.1223825
102: 2003-06-07 0.8500188 1.1038704 1.1273621
103: 2003-06-14 0.8505798 1.1161495 1.1226078
104: 2003-06-21 0.8463058 1.1165140 1.1221587
105: 2003-06-28 0.8393153 1.1040711 1.1166346
私の質問は、アウトプットがあり、元の収益率に戻したい場合はどうすればよいですか?
b=(a[2:105,2:4,with=F]/a[1:104,2:4,with=F]-1)*100
マージが続くのは不格好に思え、マージ操作を理解するのは難しいでしょう。
ありがとう