Вы можете преобразовать свои данные в объект xts
и использовать мощность атрибута index
.
# mock-up data
data <- data.frame(dates=seq(from = as.Date("2017-07-01"), to = as.Date("2018-06-30"), by = "days"), data = rnorm(length(dates)))
# load libraries
library(xts) # a powerful library that makes work with time series pretty easy
library(dplyr)
# create an xts object (an xts object is formed by the matrix of observations, ordered by an index of dates)
df_xts <- xts(data[,-1], order.by = data$dates)
data <- data %>%
# use ".indexweek" to return the week number since beginning of 1970
mutate(week_nr = .indexweek(df_xts)) %>%
# assign week number starting from 1
mutate(week_nr = week_nr - min(week_nr) + 1) %>%
# maybe add 0 in front of weeks 1-9
mutate(week_nr = ifelse(week_nr < 10, paste0("0", week_nr), week_nr))
Вывод:
> head(data)
dates data week_nr
1 2017-07-01 -0.99142495 01
2 2017-07-02 0.19130095 01
3 2017-07-03 -0.03775566 02
4 2017-07-04 1.24858796 02
5 2017-07-05 0.59453045 02
6 2017-07-06 -0.18317437 02