多年来连续一周的过渡
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 = 0
、ad2w = 16
。我希望 ad1w
和 ad2w
不是 0 和 16,而是偏移到 bd
的数字。可能吗?起源可以是任何日期。谢谢!
澄清一点。比方说:
bd = as.Date("2013-12-25")
ad1 = as.Date("2015-01-07")
ad2 = as.Date("2015-01-06")
即bd
是 2013 年的第 51 周,ad1
和 ad2
都是 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))
我正在尝试使用 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 = 0
、ad2w = 16
。我希望 ad1w
和 ad2w
不是 0 和 16,而是偏移到 bd
的数字。可能吗?起源可以是任何日期。谢谢!
澄清一点。比方说:
bd = as.Date("2013-12-25")
ad1 = as.Date("2015-01-07")
ad2 = as.Date("2015-01-06")
即bd
是 2013 年的第 51 周,ad1
和 ad2
都是 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))