2016-06-23 8 views
-3

ウェブサイトのデータによっては、日付列と訪問者列のデータフレームがあります。曜日に基づいていくつかのローリング集約カラムを追加したいと思います。最後のx週の曜日別のローリング集計 - R

私は曜日によって(カウント、合計、平均値、中央値)を集計しようとしているので、一日xx - 7とグループ化されるだろう、日x - 14 ... nが必要な週数である日x - 7*nこのウィンドウでは、データの最小データが7*n以上に戻ります。例えば

、最後の5つの金曜日は3週間にわたって中央値の最新の金曜日に対するエントリは過去3金曜日にわたる平均130のために、そして136.67になり、その後、その後100, 110, 120, 130, 160の訪問者のレベルを見たら。

サンプルデータセット内:合計のため

structure(list(visit_date = structure(1:20, .Label = c("01-01-16", 
"01-02-16", "01-03-16", "01-04-16", "01-05-16", "01-06-16", "01-07-16", 
"01-08-16", "01-09-16", "01-10-16", "01-11-16", "01-12-16", "01-13-16", 
"01-14-16", "01-15-16", "01-16-16", "01-17-16", "01-18-16", "01-19-16", 
"01-20-16"), class = "factor"), visitors = c(114L, 158L, 153L, 
157L, 192L, 128L, 197L, 146L, 123L, 127L, 170L, 126L, 106L, 112L, 
119L, 184L, 186L, 171L, 183L, 125L)), .Names = c("visit_date", 
"visitors"), class = "data.frame", row.names = c(NA, -20L)) 

理想的な出力()

newdf <- structure(list(visit_date = structure(1:20, .Label = c("01-01-16", 
"01-02-16", "01-03-16", "01-04-16", "01-05-16", "01-06-16", "01-07-16", 
"01-08-16", "01-09-16", "01-10-16", "01-11-16", "01-12-16", "01-13-16", 
"01-14-16", "01-15-16", "01-16-16", "01-17-16", "01-18-16", "01-19-16", 
"01-20-16"), class = "factor"), visitors = c(114L, 158L, 153L, 
157L, 192L, 128L, 197L, 146L, 123L, 127L, 170L, 126L, 106L, 112L, 
119L, 184L, 186L, 171L, 183L, 125L), sum_visitors = c(NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 379L, 465L, 466L, 
498L, 501L, 359L)), .Names = c("visit_date", "visitors", "sum_visitors" 
), class = "data.frame", row.names = c(NA, -20L)) 

私はrollapplyに見えたが、データフレームの行で、これをロールアウトするかどうかはわからないよきました。

これは意味があると思いますが、事前に感謝します。

+1

あなたはhttp://stackoverflow.com/questions/5963269/を見てくださいだろうサンプルのデータなどを投稿することができますか? –

+0

ガイダンスをお寄せいただきありがとうございます。編集がSOに適していることを願っています。 – pawfounder

答えて

0

OK、(グループ化の操作を簡素化するためにdata.tableを使用して)私の最高の推測:

require(data.table) 
require(lubridate) 
require(zoo) 

dt <- data.table(visit_date = c("01-01-16", "01-02-16", "01-03-16", "01-04-16", "01-05-16", "01-06-16", "01-07-16", "01-08-16", "01-09-16", "01-10-16", "01-11-16", "01-12-16", "01-13-16", "01-14-16", "01-15-16", "01-16-16", "01-17-16", "01-18-16", "01-19-16", "01-20-16"), 
       visitors = c(114L, 158L, 153L, 157L, 192L, 128L, 197L, 146L, 123L, 127L, 170L, 126L, 106L, 112L, 119L, 184L, 186L, 171L, 183L, 125L)) 


dt[, visit_date := mdy(visit_date)] 
dt[, week_day := weekdays(visit_date)] 

n_weeks <- 2 

dt[, sum_visitors := rollsum(visitors, n_weeks, align = "right", fill = NA), by = week_day] 
dt[, sum_visitors_V2 := rollapply(visitors, n_weeks, sum, align = "right", fill = NA), by = week_day] 

出力:

#  visit_date visitors week_day sum_visitors sum_visitors_V2 
# 1: 2016-01-01  114 Friday   NA    NA 
# 2: 2016-01-02  158 Saturday   NA    NA 
# 3: 2016-01-03  153 Sunday   NA    NA 
# 4: 2016-01-04  157 Monday   NA    NA 
# 5: 2016-01-05  192 Tuesday   NA    NA 
# 6: 2016-01-06  128 Wednesday   NA    NA 
# 7: 2016-01-07  197 Thursday   NA    NA 
# 8: 2016-01-08  146 Friday   260    260 
# 9: 2016-01-09  123 Saturday   281    281 
# 10: 2016-01-10  127 Sunday   280    280 
# 11: 2016-01-11  170 Monday   327    327 
# 12: 2016-01-12  126 Tuesday   318    318 
# 13: 2016-01-13  106 Wednesday   234    234 
# 14: 2016-01-14  112 Thursday   309    309 
# 15: 2016-01-15  119 Friday   265    265 
# 16: 2016-01-16  184 Saturday   307    307 
# 17: 2016-01-17  186 Sunday   313    313 
# 18: 2016-01-18  171 Monday   341    341 
# 19: 2016-01-19  183 Tuesday   309    309 
# 20: 2016-01-20  125 Wednesday   231    231 
関連する問題