2

問題は、特定の日付基準の間でのみ見える条件付き合計を行う方法に似ていますが、わずかに異なり、その答えは現在の問題に適合しません。主な違いは、各グループに基づく日付列が必ずしも完全ではない場合があることです (つまり、特定の日付が欠落している可能性があります)。

入力:

input <- read.table(text="
2017-04-01     A     1
2017-04-02     B     2
2017-04-02     B     2
2017-04-02     C     2
2017-04-02     A     2
2017-04-03     C     3
2017-04-04     A     4
2017-04-05     B     5
2017-04-06     C     6
2017-04-07     A     7
2017-04-08     B     8
2017-04-09     C     9")
colnames(input) <- c("Date","Group","Score")

ルール: 各日付の各グループについて、3 つの暦日 (現在の日付を含む) を振り返る。合計を計算します。

期待される出力:

    Date Group 3DaysSumPerGroup
    2017-04-01     A                1 #1  previous two dates are not available. partial is allowed
    2017-04-02     A                3 #2+1 both 4-01 and 4-02 are in the range
    2017-04-04     A                6 #4+2
    2017-04-07     A                7 #7
    2017-04-02     B                4 # 2+2 at the same day
    2017-04-05     B                5
    2017-04-08     B                8
    2017-04-02     C                2
    2017-04-03     C                5
    2017-04-06     C                6
    2017-04-09     C                9

partial=T で rollapply を使用しようとしましたが、結果が正しくないようです。

 input %>% 
     group_by(Group) %>% 
     arrange(Date) %>% mutate("3DaysSumPerGroup"=rollapply(data=Score,width=3,align="right",FUN=sum,partial=T,fill=NA,rm.na=T))
4

1 に答える 1