【发布时间】:2018-06-05 18:14:21
【问题描述】:
我有一些股票收益每日数据需要转换为每周格式。如您所知,仅在周一至周五进行股票交易,我需要将每天的收益相加以获得累积的每周收益。
我曾考虑过使用 lubridate 的 week 函数,但 lubridate 如何知道一周的开始时间?如何使用工作日功能使 lubridate 识别一周,即“星期一”到“星期五”是一周?
我考虑过写一个循环,例如:如果“星期一”到“星期五”在数据中,那么我会调用这个一周。但是对于第二周,我应该用什么让 R 知道我们正在进入第二周?那么当我们到达年底并且我们有 52 周时,如何重置周数以便我们进入下一年?
这是输出:
dat = structure(list(date = structure(c(4019, 4022, 4023, 4024, 4025,
4026, 4029, 4030, 4031, 4032, 4033, 4036, 4037, 4038, 4039, 4040,
4043, 4044, 4045, 4046, 4047, 4050, 4051, 4052, 4053, 4054, 4057,
4058, 4059, 4060, 4061, 4065, 4066, 4067, 4068, 4071, 4072, 4073,
4074, 4075), class = "Date"), weekday = c("Friday", "Monday",
"Tuesday", "Wednesday", "Thursday", "Friday", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Tuesday",
"Wednesday", "Thursday", "Friday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday"), COMP = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
), week = c(1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4,
4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8,
9, 9), RET = c(-0.005435, 0.040984, -0.015748, -0.021333, 0.002725,
0.01087, 0.024194, -0.002625, 0.013158, 0.033766, 0, -0.007538,
-0.005063, 0, -0.002545, 0.015306, 0.017588, -0.007407, 0.024876,
-0.009709, 0, -0.029412, 0.010101, 0.0075, -0.004963, 0.027431,
-0.002427, 0.007299, -0.009662, -0.004878, 0.014706, -0.004831,
0.004854, -0.009662, -0.021951, -0.014963, 0.005063, -0.005038,
0.010127, 0)), .Names = c("date", "weekday", "COMP", "week",
"RET"), row.names = c(NA, -40L), class = c("data.table", "data.frame"
))
library(data.table)
setDT(dat)
以下是公司 1 从 1981 年 1 月 2 日到 1981 年 2 月 27 日两个月的每日回报数据。让我们忽略来计算此刻的回报,并首先关注时间。
week 列由 week() 函数生成。如您所见,一周不是我想要的,它从星期三开始,到星期三结束。
weekday 由 weekdays() 函数生成。
我想做例如1981-01-02 作为第 1 周(因为我们这里只有星期五),1981-01-05 到 1981-01-09 作为第 2 周,反之亦然。
【问题讨论】:
-
您应该在这里查看如何制作可重现的示例以及如何更好地提出问题,以便我们为您提供帮助:) stackoverflow.com/questions/5963269/…
-
嗨,添加了我的数据框的 dput。谢谢
标签: r datetime data.table lubridate