Вот решение dplyr
library(dplyr)
df %>%
mutate(
x = as.POSIXct(strptime(paste0(x, "-1"), format = "%Y-%W-%u")),
y = format(x, "%m"),
z = 1 + as.integer(format(x, "%d")) %/% 7)
# x y z
#1 2016-03-14 03 3
#2 2016-03-21 03 4
#3 2018-01-01 01 1
#4 2019-03-11 03 2
Примечание. Предполагается, что даты year-weekno
относятся к первому дню каждой недели.
или в базе R
transform(
transform(df, x = as.POSIXct(strptime(paste0(x, "-1"), format = "%Y-%W-%u"))),
y = format(x, "%m"),
z = 1 + as.integer(format(x, "%d")) %/% 7)
# x y z
#1 2016-03-14 03 3
#2 2016-03-21 03 4
#3 2018-01-01 01 1
#4 2019-03-11 03 2