簡體   English   中英

從周的年份和年份獲得周開始日期

[英]Get week starting date from weeknum and year in R

我正在尋找能夠獲得年+周數+周日的功能,並返回日期,例如:

我想輸入以下3個

 2015
 Monday
 23

並獲得所需的輸出:

"2015-06-08"

在網上搜索之后,似乎在其他語言中存在相同的問題但在R中沒有:

如何從周數和年份獲取日期

任何幫助都會很棒!

使用strptime

strptime("2015Monday23", "%Y%A%U")
# [1] "2015-06-08"

或者更一般地說

strptime(paste0(2015, "Monday", 23), "%Y%A%U")

這里有兩個警告:

  1. 結果取決於當前的區域設置。
    在我的語言環境"German_Germany.1252" (調用Sys.getlocale("LC_TIME")來檢查您的語言環境), strptime("2015Monday23", "%Y%A%U")返回NA

  2. 結果取決於一年中數周的編號慣例。
    R有三個約定:US,UK和ISO 8601.有關詳細討論,請參閱此答案 因此,必須指定用於轉換的約定。

非英語語言環境

如果您使用的是非英語語言環境,則可以通過臨時更改當前語言環境來處理英語工作日名稱(或同樣的月份名稱):

Sys.setlocale("LC_TIME", "US")
#> [1] "English_United States.1252"
strptime("2015Monday23", "%Y%A%U")
#> [1] "2015-06-08 CEST"
Sys.setlocale("LC_TIME")
#> [1] "German_Germany.1252"

lubridate包提供了一種更方便的方式:

lubridate::parse_date_time("2015Monday23", "YAU", locale = "US")
#> [1] "2015-06-08 UTC"

一年中的各個不同的公約

由於工作日的名稱,美國和英國的公約返回相同的結果:

lubridate::parse_date_time("2015Monday23", "YAU", locale = "US")
#> [1] "2015-06-08 UTC"
lubridate::parse_date_time("2015Monday23", "YAW", locale = "UK")
#> [1] "2015-06-08 UTC"

遺憾的是,輸入時不接受ISO 8601約定的格式說明符。 因此,我們顛倒過程並將結果日期格式化為不同約定中的一年中的一周,這顯示了ISO 8601的不同結果。

format(as.Date("2015-06-08 UTC"), "%Y-%W-%u") # UK convention
#> [1] "2015-23-1"
format(as.Date("2015-06-08 UTC"), "%Y-%U-%w") # US convention
#> [1] "2015-23-1"
format(as.Date("2015-06-08 UTC"), "%G-%V-%u") # ISO 8601
#> [1] "2015-24-1"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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