我正在尝试使用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周(无舍入)。

最佳答案

这样就足够了吗?

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))

关于r - 多年来连续的一周过渡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29800880/

10-09 18:51