前提・実現したいこと
使用するデータ(df)および現在の状態は以下の通りです。
t年のcumsum_priceはt-2年とt-1年とt年のpriceの合計です。
例えば2001年A社の場合、cumsum_price=200+202+199=601となります。
現状では過去3年に2002年を含まない年(2005,2006年)のcumsum_priceもNAと表示されています。
name year price cumsum_price
A社 1999 200
A社 2000 202
A社 2001 199 601
A社 2002 NA NA
A社 2003 207 NA
A社 2004 201 NA
A社 2005 201 NA
A社 2006 201 NA
B社 1999 ... ...
B社 2000 ... ...
B社 2001 ... ...
目標は以下のように、過去3年のうち1年もNAのpriceを含まない場合、数値として合計が表示されるようにしたいです。
name year price cumsum_price
A社 1999 200
A社 2000 202
A社 2001 199 601
A社 2002 NA NA
A社 2003 207 NA
A社 2003 201 NA
A社 2003 201 609
A社 2003 201 603
B社 1999 ... ...
B社 2000 ... ...
B社 2001 ... ...
実行したソースコード
"cumsum_price"を作成する際に実行したコードは以下の通りです。
do.call(rbind, c( lapply(split(df, df$name), function(x) { data.frame(x, cumsum_price = { i = findInterval(x$year-3, x$year) w = which(as.logical(i)) cs = cumsum(x$price) i[w] = cs[i[w]] cs - i })}), make.row.names=F))
ご回答をいただけると幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/06 21:26
2021/11/06 22:54
2021/11/06 23:48 編集
2021/11/07 23:37