R语言 在给定周日期数组的情况下,将每日聚合到每周

y1aodyip  于 2023-05-20  发布在  其他
关注(0)|答案(1)|浏览(110)

在我开始之前,让我说我知道存在各种周的定义,但我很好奇如何在不知道我的数据集中使用的周的定义的情况下解决这个问题。
我想把每天的值加到每周的值中。我有一个表示一周结束的日期向量(表示week),以及一个包含每日频率日期的data.table(表示dt)。我需要搜索week中的每个日期,并将其对应的值与之前的6相加,以获得新的聚合值。转换后的日期应与week中的日期相同。
时间序列没有间隙。

week

["2017-01-01", "2017-01-08", ...]

dt

"date","value"
"2016-12-26",1
"2016-12-27",1
"2016-12-28",1
"2016-12-29",1
"2016-12-30",1
"2016-12-31",1
"2017-01-01",1
"2017-01-02",2
"2017-01-03",2
"2017-01-04",2
"2017-01-05",2
"2017-01-06",2
"2017-01-07",2
"2017-01-08",2
...

expected result

"2017-01-01",7
"2017-01-01",14
...
sqougxex

sqougxex1#

您可以循环week_starts并计算前6天的总和,即

week_starts <- as.Date(c("2017-01-01", "2017-01-08"))

df$date <- as.Date(df$date)
sums <- sapply(week_starts, \(i) sum(df$value[df$date >= (i - 6) & df$date <= i]))

cbind.data.frame(week_starts, sums)

  week_starts sums
1  2017-01-01    7
2  2017-01-08   14

资料

structure(list(date = structure(c(17161, 17162, 17163, 17164, 
17165, 17166, 17167, 17168, 17169, 17170, 17171, 17172, 17173, 
17174), class = "Date"), value = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L)), row.names = c(NA, -14L), class = "data.frame")

相关问题