![](/img/trans.png)
[英]Week of year using bigquery / bigrquery and dbplyr? (equivalent of lubridate::week)
[英]Lubridate week() to find consecutive week number for multi-year periods
在 R 中,假設我有一些 Lubridate 日期的向量:
> Date
"2012-01-01 UTC"
"2013-01-01 UTC"
接下來,假設我想看看這些天屬於哪個周數:
> week(Date)
1
1
潤滑太棒了!
但是等等......我正在處理一個包含 10,000 行數據的時間序列......數據跨越 3 年。
我一直在努力尋找某種方法來實現這一目標:
> result of awesome R code here
1
54
問題是:是否有一種簡潔的方法可以在 Lubridate 中列出多年期間的周數列表? 更直接地說,我希望將第二年的第一周表示為第 54 周。 第三年的第一周被表示為第 107 周,令人作嘔。
到目前為止,我已經嘗試了許多老套的方案,但似乎無法創造出沒有用透明膠帶固定在一起的東西。 任何建議將不勝感激。 提前致謝。
要獲得從特定日期到另一個日期的間隔,您只需減去...
如果tda
是您的日期向量,則
tda - min(tda)
將是它們之間的秒差。
要在數周內取出單位:
(tda - min(tda))/eweeks(1)
從特定日期開始:
tda - ymd(19960101)
這給出了從 1996 年到每個值的天數。
從那里,您可以按每周天數或每周秒數進行划分。
(tda - ymd(19960101))/eweeks(1)
僅獲取整數部分,並從 2012 年 1 月開始:
trunc((tda - ymd(20111225))/eweeks(1))
測試數據:
tda = ymd(c(20120101, 20120106, 20130101, 20130108))
輸出:
1 1 53 54
由於eweeks()
現在已棄用,我想我會添加到@beroe 的答案中。
如果tda
是您的日期向量,您可以通過以下方式獲得周數:
weeknos <- (interval(min(tda), tda) %/% weeks(1)) + 1
其中%/%
導致整數除法。 ( 5 / 3 = 1.667
; 5 %/% 3 = 1
)
你可以這樣做:
week(dat) +53*(year(dat)-min(year(dat)))
鑒於你喜歡 lubridate(我也是)
year_week <- function(x,base) week(x) - week(base) + 52*(year(x) - year(base))
test <- ymd(c(20120101, 20120106, 20130101, 20130108))
year_week(test, "2012-01-01")
給予
[1] 0 0 52 53
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.