假设您只有以下两条日期信息:一年中的哪一天和一年,然后从创建您的 WeekStarting 变量开始:
1)
注意:使用%U 假设您的一周从星期日开始。如果它从星期一开始,请改用%W。
yr <- "2016"
df$WeekStarting <- as.Date(paste0(yr, sprintf("%02d", df$Week), "00"), "%Y%U%w")
head(df$WeekStarting, 8)
[1] "2016-01-03" "2016-01-03" "2016-01-03" "2016-01-03" "2016-01-03" "2016-01-03"
[7] "2016-01-03" "2016-01-10"
如果您已经有问题中发布的格式的WeekStarting,那么您可以从这里开始:
2)
dow <- setNames(0:6, c("Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"))
# WeekStarting is character, like in your question
within(df, Date <- as.Date(WeekStarting, "%m/%d/%Y") + dow[day])
# If you started in Step 1
within(df, Date <- WeekStarting + dow[day])
输出
Week day WeekStarting Date
1 1 Sunday 2016-01-03 2016-01-03
2 1 Monday 2016-01-03 2016-01-04
3 1 Tuesday 2016-01-03 2016-01-05
4 1 Wednesday 2016-01-03 2016-01-06
5 1 Thursday 2016-01-03 2016-01-07
6 1 Friday 2016-01-03 2016-01-08
7 1 Saturday 2016-01-03 2016-01-09
8 2 Sunday 2016-01-10 2016-01-10
9 2 Monday 2016-01-10 2016-01-11
10 2 Tuesday 2016-01-10 2016-01-12
11 2 Wednesday 2016-01-10 2016-01-13
12 2 Thursday 2016-01-10 2016-01-14
13 2 Friday 2016-01-10 2016-01-15
14 2 Saturday 2016-01-10 2016-01-16
15 3 Sunday 2016-01-17 2016-01-17
16 3 Monday 2016-01-17 2016-01-18
17 3 Tuesday 2016-01-17 2016-01-19
18 3 Wednesday 2016-01-17 2016-01-20
19 3 Thursday 2016-01-17 2016-01-21
20 3 Friday 2016-01-17 2016-01-22
21 3 Saturday 2016-01-17 2016-01-23
数据
df <- structure(list(Week = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), day = c("Sunday",
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday",
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
"Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday")), class = "data.frame", row.names = c(NA,
-21L))