簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM