多年来连续一周的过渡

Continuous week transition over years

我正在尝试使用 as.Date 相对于任何 origin 或基准日期计算周偏移量。例如:

bd = as.Date("2013-12-29")
ad1 = as.Date("2014-01-01")
ad1w = as.numeric(strftime(ad1, format = "%W"))
ad2 = as.Date("2015-04-20")
ad2w = as.numeric(strftime(ad2, format = "%W"))

给出:ad1w = 0ad2w = 16。我希望 ad1wad2w 不是 0 和 16,而是偏移到 bd 的数字。可能吗?起源可以是任何日期。谢谢!

澄清一点。比方说:

bd = as.Date("2013-12-25")
ad1 = as.Date("2015-01-07")
ad2 = as.Date("2015-01-06")

bd 是 2013 年的第 51 周,ad1ad2 都是 2015 年的第 1 周。两个偏移量都应该是 54 周,w/o 四舍五入。

这就够了吗?

ad1w <- as.numeric(floor((ad1 - bd) /7))
ad2w <- as.numeric(floor((ad2 - bd) /7))

更新

使用 lubridate 您可以使用:

library(lubridate)

ad1w <- as.numeric(floor((ad1-lubridate::wday(ad1) - (bd-lubridate::wday(bd))) /7))
ad2w <- as.numeric(floor((ad2-lubridate::wday(ad2) - (bd-lubridate::wday(bd))) /7))

逻辑如下。将每个日期重新编码为前一周的最后一个日期,然后使用 as.numeric(floor((recoded_ad1 - recoded_bd) /7))