Используя aggregate
. Используйте transform
ed данные, где вы format
ваши даты до %W
eek чисел. Пример:
res <- aggregate(value ~ week + city, data=transform(dat, week=format(date, "%W")), mean)
res[1:5, ]
# week city value
# 1 00 A 6.500000
# 2 01 A 6.857143
# 3 02 A 4.857143
# 4 03 A 5.857143
# 5 04 A 5.714286
res[52:57, ]
# week city value
# 52 51 A 5.714286
# 53 52 A 3.500000
# 54 00 B 6.500000
# 55 01 B 5.000000
# 56 02 B 3.285714
# 57 03 B 5.428571
Примечание , что вам нужна переменная даты, отформатированная как "date"
, т.е. когда она у вас есть в формате "character"
, вам необходимо сделать заранее dat$date <- as.Date(dat$date)
.
Данные игрушки
dat <- expand.grid(city=LETTERS[1:3],
date=seq.Date(as.Date("2019-01-01"), as.Date("2019-12-31"), "day"))
set.seed(42)
dat$value <- sample(1:10, nrow(dat), replace=T)