英文:
Aggregating daily to weekly given an array of week dates
问题
以下是翻译好的部分:
在我开始之前,让我说一下,我知道存在各种各样的星期定义,但我很好奇如何在不知道我的数据集中使用的星期定义的情况下解决这个问题。
我想将每日数值求和为每周数值。我有一个代表周末的日期向量(称为“week”),以及一个包含每日频率日期的数据表(称为“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
...
英文:
Before I start, let me say I am aware various definitions of week exist, but I am curious as to how to solve this problem without knowing the definition of the week used in my dataset.
I want to sum daily values into weekly values. I have a vector of dates which represent the end of the week (saying week
), and a data.table with daily frequency dates (saying dt
). I need to search up each date in week
and sum its corresponding value and the 6 before to come up with a new aggregated value. The transformed date should correspond to the same date as in week
.
The time series has no gap.
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
...
答案1
得分: 1
你可以循环遍历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")
英文:
You can loop over the week_starts
and do the sum of previous 6 days, i.e.
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
DATA
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")
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论