[英]Convert four digit year values to class Date
我的數據集中有一個整數列,它有四位數的年份值,例如:
c(2001, 2002, 2002, 2002, 2003, 2005)
我嘗試使用as.Date
將四位數年份轉換為類Date
:
year <- as.Date(as.character(data_file$evtYear), format = "%Y")
但輸出是:
"2001-05-15" "2002-05-15" "2002-05-15" "2002-05-15" "2003-05-15" "2005-05-15"
這給出了錯誤的輸出。 它在一個日期(2001 年和 15 年)中給出兩年的值。
我只想將我的四位數年份部分從原始數據轉換為 'Year' 作為類Date
。 預期輸出很簡單:
2001 2002 2002 2002 2003 2005
但是他們的班級應該是Date
類型的。
如何在 R 中實現這一點?
根據評論,提出問題的人不需要將數字年份更改為"Date"
類; 盡管如此,問題是如何做到這一點,所以這里是一個答案。
以下是從 4 位數字年份創建"Date"
類對象的幾種方法。 全部使用as.Date
:
yrs <- c(2001, 2002, 2002, 2002, 2003, 2005)
1) ISO 日期
as.Date(ISOdate(yrs, 1, 1)) # beginning of year
as.Date(ISOdate(yrs, 12, 31)) # end of year
這個 ISOdate 解決方案有點棘手,因為它創建了一個中間 POSIXct 對象,因此可能存在時區問題。 您可能更喜歡以下之一。
2)粘貼
as.Date(paste(yrs, 1, 1, sep = "-")) # beginning of year
as.Date(paste(yrs, 12, 31, sep = "-")) # end of year
3) 動物園::as.yearmon
library(zoo)
as.Date(as.yearmon(yrs)) # beginning of year
as.Date(as.yearmon(yrs) + 11/12, frac = 1) # end of year
注意:如果y
是上述任何一項的結果,則format(y, "%Y")
給出字符年份,而as.numeric(format(y, "%Y"))
給出數字年份。
正如 OP 已經認識到的那樣,僅一年並不能構成有效日期,因為未指定月份和日期。
然而,一些日期和日期時間轉換函數,例如ymd()
, parse_date_time()
,在lubridate
包中識別一個truncated
的參數,以允許解析不完整的日期:
yrs <- c(2001, 2002, 2002, 2002, 2003, 2005)
lubridate::ymd(yrs, truncated = 2L)
[1] "2001-01-01" "2002-01-01" "2002-01-01" "2002-01-01" "2003-01-01" "2005-01-01"
年份已在 1 月 1 日之前完成,以便確定有效日期。 結果是類Date
。
你可以做:
library(lubridate)
yrs <- c(2001, 2002, 2002, 2002, 2003, 2005)
yr <- as.Date(as.character(yrs), format = "%Y")
y <- year(yr)
輸出:
2001 2002 2002 2002 2003 2005
一個潤滑的答案:
library(lubridate)
year <- ymd(sprintf("%d-01-01",data_file$evtYear))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.