[英]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")
這里有兩個警告:
結果取決於當前的區域設置。
在我的語言環境"German_Germany.1252"
(調用Sys.getlocale("LC_TIME")
來檢查您的語言環境), strptime("2015Monday23", "%Y%A%U")
返回NA
。
結果取決於一年中數周的編號慣例。
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.