増分開発データがあります。各Dev#列には、ClaimNoの個別の支払いが表示されます。
ClaimNo<-c("3333","11111","01010","15060")
AccidentPeriod <- c(0,3,1,2)
Information<-c("Infor","Infor","Infor","Infor")
Dev0<-c(100,40,50,0)
Dev1<-c(0,0,100,15)
Dev2<-c(50,0,0,0)
Dev3<-c(0,0,0,0)
IncrementalData<-data.frame(ClaimNo,AccidentPeriod,Information,Dev0,Dev1,Dev2,Dev3)
累積する必要があります。列の合計は対角線で停止する必要があります。たとえば、4つの開発期間があることがわかっています。クレームのAccidentPeriodが2の場合、AccidentPeriod + Dev#は3を超えることはできないため(0から開始)、合計はDev2で停止する必要があります。
If the AccidentPeriod is 0, summing of Dev# should stop at 3
If the AccidentPeriod is 2, summing of Dev# should stop at 1
If the AccidentPeriod is 1, summing of Dev# should stop at 2
この累積データを取得するために、各累積列にifelse関数を記述できます。しかし、列が多すぎます。短い方法があるはずです。
これが私に必要なものです。
これをVBAで記述したい場合:
DevCum_0=Dev0
for a=1 to 3
b=a-1
DevCum_a=Deva+DevCum_b
ありがとう!
以下のコードを試してみてください apply
indsDev <- grep("^Dev",names(IncrementalData))
dfout <- cbind(
IncrementalData[-indsDev],
t(apply(
IncrementalData,
1,
function(x) {
x[min(indsDev):(max(indsDev) - as.numeric(x[2]))] <- head(cumsum(x[indsDev]), length(indsDev) - as.numeric(x[2]))
`class<-`(x[indsDev], "numeric")
}
))
)
そのような
> dfout
ClaimNo AccidentPeriod Information Dev0 Dev1 Dev2 Dev3
1 3333 0 Infor 100 100 150 150
2 11111 3 Infor 40 0 0 0
3 01010 1 Infor 50 150 150 0
4 15060 2 Infor 0 15 0 0
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加