問題はHow do I do a conditional sum which only looks between certain date criteriaと似ていますが、わずかに異なります。その答えは現在の問題には当てはまりません。振り返ってみると、それぞれの日に、グループごとに:グループごとの過去のウィンドウサイズの日付の合計
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
私は部分的= 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))
はおそらく生成する 'cut'を使用しますウィンドウグループ – akrun
グループBの最初の値が4の理由は?そのグループの以前の値はありません –
@DavidArenburg、Bは同じ日に2つのレコードを持っています – HappyCoding